automapper_validation/lib.rs
1//! AHB condition expression parsing, evaluation, and EDIFACT message validation.
2//!
3//! This crate provides three layers of functionality:
4//!
5//! 1. **Expression parsing** ([`expr`]): Parses AHB status strings like
6//! `"Muss [182] ∧ [6] ∧ [570]"` into a [`ConditionExpr`] AST.
7//!
8//! 2. **Condition evaluation** ([`eval`]): Evaluates condition expressions
9//! using a [`ConditionEvaluator`] trait with three-valued logic
10//! (True/False/Unknown) for graceful handling of external conditions.
11//!
12//! 3. **Message validation** ([`validator`]): Validates EDIFACT messages
13//! against AHB rules, producing a [`ValidationReport`] with typed issues.
14//!
15//! # Quick Start
16//!
17//! ```ignore
18//! use automapper_validation::expr::{ConditionParser, ConditionExpr};
19//! use automapper_validation::eval::{ConditionExprEvaluator, ConditionResult};
20//! use automapper_validation::validator::{EdifactValidator, ValidationLevel};
21//!
22//! // Parse a condition expression
23//! let expr = ConditionParser::parse("Muss [182] ∧ [152]").unwrap();
24//!
25//! // Validate pre-parsed segments against AHB workflow
26//! let validator = EdifactValidator::new(my_evaluator);
27//! let report = validator.validate(&segments, &workflow, &external, ValidationLevel::Full);
28//! ```
29
30pub mod error;
31pub mod eval;
32pub mod expr;
33pub mod generated;
34pub mod pipeline;
35pub mod validator;
36pub mod workflow_schema;
37
38// Re-export key types at crate root for convenience
39pub use error::{ParseError, ValidationError};
40pub use eval::{
41 CodeListProvider, CompositeExternalProvider, ConditionEvaluator, ConditionExprEvaluator,
42 ConditionResult, CountryPostalCodeProvider, EvaluationContext, GroupNavigator,
43 KonfigurationenProvider, MapExternalProvider, MarketRole, MarketRoleProvider,
44 NoOpGroupNavigator, Sector, SectorProvider,
45};
46pub use expr::{ConditionExpr, ConditionParser};
47pub use validator::{
48 build_validated_tree, validate_unt_segment_count, AhbGroupNode, AhbNode, EdifactValidator,
49 ErrorCodes, SegmentPosition, Severity, ValidatedTree, ValidationCategory, ValidationIssue,
50 ValidationLevel, ValidationReport,
51};
52
53// Re-export AHB workflow types for callers
54pub use pipeline::validate_edifact_message;
55pub use validator::validate::{AhbCodeRule, AhbFieldRule, AhbWorkflow};
56pub use workflow_schema::ahb_workflow_from_pid_schema;
57
58// Re-export generated evaluators
59pub use generated::*;