///|
/// Selects one deterministic Roman notation grammar.
pub(all) enum RomanMode {
  ModernCanonical
  AdditiveHistorical
  ClockFace
  ParenthesizedThousands
} derive(Eq, Debug)

///|
/// Selects the letter case emitted by configured formatters.
pub(all) enum LetterCase {
  Uppercase
  Lowercase
} derive(Eq, Debug)

///|
/// Configures normalization and grammar selection for report parsing.
pub(all) struct ParseConfig {
  mode : RomanMode
  accept_lowercase : Bool
  accept_unicode : Bool
  trim_outer_whitespace : Bool
} derive(Eq, Debug)

///|
/// Configures grammar and case selection for report formatting.
pub(all) struct FormatConfig {
  mode : RomanMode
  letter_case : LetterCase
} derive(Eq, Debug)

///|
/// Configures candidate retention and limits for document scanning.
pub(all) struct ScanConfig {
  parse_config : ParseConfig
  retain_rejected : Bool
  include_single_symbol : Bool
  max_candidate_length : Int
} derive(Eq, Debug)

///|
/// Reports an invalid reusable processing configuration.
pub(all) enum ConfigError {
  InvalidCandidateLength(Int)
} derive(Eq, Debug)