pub struct ValidationContext { /* private fields */ }Expand description
Runs the four validation layers over one segment slice, collecting every
issue into a single ValidationReport.
| Layer | ValidationLayer | Default | Checks | Provided by |
|---|---|---|---|---|
| Envelope | Envelope | off | UNB/UNH/UNT/UNZ structure and counts | EnvelopeValidator |
| Structure | Structure | on | segment presence, order, arity | DirectoryValidator |
| Code-list | CodeList | on | DE values against the directory’s code lists | DirectoryValidator |
| Profile | Profile | on | partner and industry business rules | ProfileRulePack |
Validators run in registration order within a layer; layers have no ordering
beyond that. With the envelope layer on, UNB/UNZ/UNG/UNE are excluded
from the slice later layers see.
A pack can be scoped by message type (for_message_type) and
association-assigned code (for_release).
§Group-aware validation
validate_grouped runs the flat pass and then a
group pass over a SegmentGroupIndexed tree,
so rules scoped to a segment group — “DTM must appear in every SG5” — can
fire.
§Example — building a context
use std::sync::{Arc, LazyLock};
use edifact_rs::{ProfileRulePack, ValidationContext, ValidationLayer};
static ORDERS_PACK: LazyLock<Arc<ProfileRulePack>> = LazyLock::new(|| {
Arc::new(
ProfileRulePack::new("ORDERS-MIG-5.5")
.for_message_type("ORDERS")
.require_segment("BGM", "MIG-BGM-M")
.require_segment_in_group("SG2", "NAD", "SG2-NAD-M"),
)
});
let ctx = ValidationContext::builder()
.with_envelope_validation()
.with_profile_pack_arc(Arc::clone(&*ORDERS_PACK))
.build();
let report = ctx.validate(&segments);Implementations§
Source§impl ValidationContext
impl ValidationContext
Sourcepub fn builder() -> ValidationContextBuilder
pub fn builder() -> ValidationContextBuilder
Start building a validation context.
Sourcepub fn validate(&self, segments: &[Segment<'_>]) -> ValidationReport
pub fn validate(&self, segments: &[Segment<'_>]) -> ValidationReport
Execute validators in lenient mode for enabled layers.
Sourcepub fn validate_grouped(
&self,
root: &SegmentGroupIndexed<'_>,
segments: &[Segment<'_>],
) -> ValidationReport
pub fn validate_grouped( &self, root: &SegmentGroupIndexed<'_>, segments: &[Segment<'_>], ) -> ValidationReport
Execute flat + group-aware validators in lenient mode.
This method runs the full flat validation pass (same as
validate_lenient) and then runs the
group-aware pass by calling Validator::validate_group_batch on every
validator. Validators without group rules treat validate_group_batch
as a no-op, so this is safe to call for any context.
§When to use
Use this method when you have already grouped your segments with
group_segments_indexed or
group_segments_indexed and
want group-presence or cross-group rules (via
ProfileRulePack::with_scoped_group_rule_fn)
to fire.
§Example
use edifact_rs::{group_segments_indexed, ValidationContext};
use edifact_rs::group::GroupDef;
static SCHEMA: &[GroupDef] = &[GroupDef::new("SG5", "LOC")];
let tree = group_segments_indexed(&segments, SCHEMA, "ROOT");
let pack = ProfileRulePack::new("PROFILE")
.require_segment_in_group("SG5", "DTM", "SG5-DTM-M");
let ctx = ValidationContext::builder().with_profile_pack(pack).build();
let report = ctx.validate_grouped(&tree, &segments);Sourcepub fn validate_with<T: Any + Send + Sync>(
&self,
segments: &[Segment<'_>],
value: &T,
) -> ValidationReport
pub fn validate_with<T: Any + Send + Sync>( &self, segments: &[Segment<'_>], value: &T, ) -> ValidationReport
Execute validators with per-call typed metadata.
message_type is set to None here; the concrete validation method
(validate_with_context) re-extracts the message type from the UNH
segment, so there is no information loss.
Sourcepub fn message_type(&self) -> Option<&str>
pub fn message_type(&self) -> Option<&str>
Message type metadata associated with this context, if provided.
Sourcepub fn message_ref(&self) -> Option<&str>
pub fn message_ref(&self) -> Option<&str>
Message reference (UNH element 0) associated with this context, if provided.
Sourcepub fn fork_with_message_ref(&self, message_ref: impl Into<String>) -> Self
pub fn fork_with_message_ref(&self, message_ref: impl Into<String>) -> Self
Create a child context that inherits all rules and configuration from self
but is scoped to a specific message reference (UNH DE 0062).
Issues produced by the child context are automatically stamped with
message_ref, making it easy to correlate findings in a multi-message
interchange back to the originating UNH/UNT envelope.
§Example
let base_ctx = ValidationContext::builder()
.with_profile_pack(mig_pack)
.build();
for (ref_no, message_segments) in messages {
let child = base_ctx.fork_with_message_ref(&ref_no);
let report = child.validate(&message_segments);
}Auto Trait Implementations§
impl !RefUnwindSafe for ValidationContext
impl !UnwindSafe for ValidationContext
impl Freeze for ValidationContext
impl Send for ValidationContext
impl Sync for ValidationContext
impl Unpin for ValidationContext
impl UnsafeUnpin for ValidationContext
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<D> OwoColorize for D
impl<D> OwoColorize for D
Source§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
Source§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
Source§fn black(&self) -> FgColorDisplay<'_, Black, Self>
fn black(&self) -> FgColorDisplay<'_, Black, Self>
Source§fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
Source§fn red(&self) -> FgColorDisplay<'_, Red, Self>
fn red(&self) -> FgColorDisplay<'_, Red, Self>
Source§fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
Source§fn green(&self) -> FgColorDisplay<'_, Green, Self>
fn green(&self) -> FgColorDisplay<'_, Green, Self>
Source§fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
Source§fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
Source§fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
Source§fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
Source§fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
Source§fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
Source§fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
Source§fn white(&self) -> FgColorDisplay<'_, White, Self>
fn white(&self) -> FgColorDisplay<'_, White, Self>
Source§fn on_white(&self) -> BgColorDisplay<'_, White, Self>
fn on_white(&self) -> BgColorDisplay<'_, White, Self>
Source§fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
Source§fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
Source§fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
Source§fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
Source§fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
Source§fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
Source§fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
Source§fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
Source§fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
Source§fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
Source§fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
Source§fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
Source§fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
Source§fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
Source§fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
Source§fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
Source§fn bold(&self) -> BoldDisplay<'_, Self>
fn bold(&self) -> BoldDisplay<'_, Self>
Source§fn dimmed(&self) -> DimDisplay<'_, Self>
fn dimmed(&self) -> DimDisplay<'_, Self>
Source§fn italic(&self) -> ItalicDisplay<'_, Self>
fn italic(&self) -> ItalicDisplay<'_, Self>
Source§fn underline(&self) -> UnderlineDisplay<'_, Self>
fn underline(&self) -> UnderlineDisplay<'_, Self>
Source§fn blink(&self) -> BlinkDisplay<'_, Self>
fn blink(&self) -> BlinkDisplay<'_, Self>
Source§fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
Source§fn reversed(&self) -> ReversedDisplay<'_, Self>
fn reversed(&self) -> ReversedDisplay<'_, Self>
Source§fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
Source§fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::fg or
a color-specific method, such as OwoColorize::green, Read moreSource§fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::bg or
a color-specific method, such as OwoColorize::on_yellow, Read more