Skip to main content

DirectoryValidator

Struct DirectoryValidator 

Source
pub struct DirectoryValidator { /* private fields */ }
Expand description

Shared validator implementation that is configured per UN/EDIFACT directory release.

§Scope and limitations

DirectoryValidator validates individual segment content (element counts, component counts, code-list values, and conditional rules) and checks that every mandatory segment type is present at least once. It does not validate segment sequence or repetition cardinality — i.e., it cannot tell you that a BGM segment appears more than once, or that a RFF group appears in the wrong position. Full sequence validation requires a state-machine per message type (UN/EDIFACT Segment Tables) which is outside the scope of this implementation.

Implementations§

Source§

impl DirectoryValidator

Source

pub fn new( directory_id: &'static str, segment_lookup: fn(&str) -> Option<&'static SegmentDefinition>, is_code_valid: fn(&str, &str) -> bool, suggest_code: fn(&str, &str) -> Option<&'static str>, expected_components: fn(&str, usize) -> Option<u8>, additional_structure_rule: Option<fn(&Segment<'_>) -> Result<(), EdifactError>>, ) -> Self

Create a validator for a specific directory release with injected lookup/check hooks.

Source

pub fn from_definitions(definitions: &'static [SegmentDefinition]) -> Self

Create a validator from a static slice of SegmentDefinitions.

This is the preferred constructor when code-generating directory data as a static array: no manual fn-pointer boilerplate is required.

Code-list checks are disabled by default (the built-in is_code_valid always returns true). Call with_code_list_rules to register directory-specific rules that actually validate code values.

§Example
static MY_SEGMENTS: &[SegmentDefinition] = &[ /* … */ ];

let validator = DirectoryValidator::from_definitions(MY_SEGMENTS)
    .with_code_list_rules(my_code_list_rules);
Source

pub fn from_owned_definitions(definitions: Vec<OwnedSegmentDef>) -> Self

Create a validator from a runtime-owned collection of segment definitions.

Use this (or DirectoryValidatorBuilder) when segment definitions are loaded from an external source at startup (JSON, database, YAML, …) rather than being known at compile time.

Code-list checks are disabled by default; enable them by chaining with_code_list_rules and setting is_code_valid via a custom new call or by subclassing the builder.

§Example
let defs = vec![
    OwnedSegmentDef::new(
        "BGM".to_owned(),
        "Beginning of message".to_owned(),
        vec![OwnedElementRef::new(1, "C002".to_owned(), Status::Mandatory, 1)],
    ),
];
let validator = DirectoryValidator::from_owned_definitions(defs)
    .with_directory_id("runtime-profile");
Source

pub fn with_directory_id(self, id: impl Into<String>) -> Self

Set the directory identifier string (used in error messages).

Source

pub fn with_code_list_rules( self, f: impl Fn(&str) -> &'static [(usize, usize, &'static str)] + Send + Sync + 'static, ) -> Self

Override the code-list rules function.

Directories can supply a directory-specific implementation that extends or replaces the base rules from base_code_list_rules.

Source

pub fn structure_only(self) -> Self

Enable only structure checks and disable code-list checks.

Source

pub fn code_list_only(self) -> Self

Enable only code-list checks and disable structure checks.

Source

pub fn enforce_known_tags(self, enforce: bool) -> Self

Configure whether unknown segment tags should be rejected.

Source

pub fn with_required_segments( self, f: impl Fn(&str) -> &'static [&'static str] + Send + Sync + 'static, ) -> Self

Override the required-segments mapping used for structural validation.

The supplied function receives an EDIFACT message type string (e.g. "ORDERS") and must return a 'static slice of segment tags that are mandatory for that type. The tags are checked both for presence and for canonical ordering within the message.

§Example
fn my_required_segments(msg_type: &str) -> &'static [&'static str] {
    match msg_type {
        "DESADV" => &["UNH", "BGM", "SHP", "UNT"],
        "INVOIC" => &["UNH", "BGM", "MOA", "UNT"],
        _ => &["UNH", "UNT"],
    }
}

let validator = DirectoryValidator::from_definitions(DEFS)
    .with_required_segments(my_required_segments);

Trait Implementations§

Source§

impl Clone for DirectoryValidator

Source§

fn clone(&self) -> DirectoryValidator

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for DirectoryValidator

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Validator for DirectoryValidator

Source§

fn set_message_type(&mut self, message_type: Option<&str>)

Configure message-type metadata for validators that support explicit scoping.
Source§

fn validate_batch( &self, segments: &[Segment<'_>], report: &mut ValidationReport, _context: &ValidationRuleContext<'_>, )

Validate a full segment set and append issues to report. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<D> OwoColorize for D

Source§

fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>
where C: Color,

Set the foreground color generically Read more
Source§

fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>
where C: Color,

Set the background color generically. Read more
Source§

fn black(&self) -> FgColorDisplay<'_, Black, Self>

Change the foreground color to black
Source§

fn on_black(&self) -> BgColorDisplay<'_, Black, Self>

Change the background color to black
Source§

fn red(&self) -> FgColorDisplay<'_, Red, Self>

Change the foreground color to red
Source§

fn on_red(&self) -> BgColorDisplay<'_, Red, Self>

Change the background color to red
Source§

fn green(&self) -> FgColorDisplay<'_, Green, Self>

Change the foreground color to green
Source§

fn on_green(&self) -> BgColorDisplay<'_, Green, Self>

Change the background color to green
Source§

fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>

Change the foreground color to yellow
Source§

fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>

Change the background color to yellow
Source§

fn blue(&self) -> FgColorDisplay<'_, Blue, Self>

Change the foreground color to blue
Source§

fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>

Change the background color to blue
Source§

fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to magenta
Source§

fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to magenta
Source§

fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to purple
Source§

fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to purple
Source§

fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>

Change the foreground color to cyan
Source§

fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>

Change the background color to cyan
Source§

fn white(&self) -> FgColorDisplay<'_, White, Self>

Change the foreground color to white
Source§

fn on_white(&self) -> BgColorDisplay<'_, White, Self>

Change the background color to white
Source§

fn default_color(&self) -> FgColorDisplay<'_, Default, Self>

Change the foreground color to the terminal default
Source§

fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>

Change the background color to the terminal default
Source§

fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>

Change the foreground color to bright black
Source§

fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>

Change the background color to bright black
Source§

fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>

Change the foreground color to bright red
Source§

fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>

Change the background color to bright red
Source§

fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>

Change the foreground color to bright green
Source§

fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>

Change the background color to bright green
Source§

fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>

Change the foreground color to bright yellow
Source§

fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>

Change the background color to bright yellow
Source§

fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>

Change the foreground color to bright blue
Source§

fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>

Change the background color to bright blue
Source§

fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright magenta
Source§

fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright magenta
Source§

fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright purple
Source§

fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright purple
Source§

fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>

Change the foreground color to bright cyan
Source§

fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>

Change the background color to bright cyan
Source§

fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>

Change the foreground color to bright white
Source§

fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>

Change the background color to bright white
Source§

fn bold(&self) -> BoldDisplay<'_, Self>

Make the text bold
Source§

fn dimmed(&self) -> DimDisplay<'_, Self>

Make the text dim
Source§

fn italic(&self) -> ItalicDisplay<'_, Self>

Make the text italicized
Source§

fn underline(&self) -> UnderlineDisplay<'_, Self>

Make the text underlined
Make the text blink
Make the text blink (but fast!)
Source§

fn reversed(&self) -> ReversedDisplay<'_, Self>

Swap the foreground and background colors
Source§

fn hidden(&self) -> HiddenDisplay<'_, Self>

Hide the text
Source§

fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>

Cross out the text
Source§

fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the foreground color at runtime. Only use if you do not know which color will be used at compile-time. If the color is constant, use either OwoColorize::fg or a color-specific method, such as OwoColorize::green, Read more
Source§

fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the background color at runtime. Only use if you do not know what color to use at compile-time. If the color is constant, use either OwoColorize::bg or a color-specific method, such as OwoColorize::on_yellow, Read more
Source§

fn fg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> FgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the foreground color to a specific RGB value.
Source§

fn bg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> BgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the background color to a specific RGB value.
Source§

fn truecolor(&self, r: u8, g: u8, b: u8) -> FgDynColorDisplay<'_, Rgb, Self>

Sets the foreground color to an RGB value.
Source§

fn on_truecolor(&self, r: u8, g: u8, b: u8) -> BgDynColorDisplay<'_, Rgb, Self>

Sets the background color to an RGB value.
Source§

fn style(&self, style: Style) -> Styled<&Self>

Apply a runtime-determined style
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.