automapper-validation 0.12.0

AHB condition expression parsing, evaluation, and EDIFACT validation
Documentation
//! AHB condition expression parsing, evaluation, and EDIFACT message validation.
//!
//! This crate provides three layers of functionality:
//!
//! 1. **Expression parsing** ([`expr`]): Parses AHB status strings like
//!    `"Muss [182] ∧ [6] ∧ [570]"` into a [`ConditionExpr`] AST.
//!
//! 2. **Condition evaluation** ([`eval`]): Evaluates condition expressions
//!    using a [`ConditionEvaluator`] trait with three-valued logic
//!    (True/False/Unknown) for graceful handling of external conditions.
//!
//! 3. **Message validation** ([`validator`]): Validates EDIFACT messages
//!    against AHB rules, producing a [`ValidationReport`] with typed issues.
//!
//! # Quick Start
//!
//! ```ignore
//! use automapper_validation::expr::{ConditionParser, ConditionExpr};
//! use automapper_validation::eval::{ConditionExprEvaluator, ConditionResult};
//! use automapper_validation::validator::{EdifactValidator, ValidationLevel};
//!
//! // Parse a condition expression
//! let expr = ConditionParser::parse("Muss [182] ∧ [152]").unwrap();
//!
//! // Validate pre-parsed segments against AHB workflow
//! let validator = EdifactValidator::new(my_evaluator);
//! let report = validator.validate(&segments, &workflow, &external, ValidationLevel::Full);
//! ```

pub mod display;
pub mod error;
pub mod eval;
pub mod evaluator_factory;
pub mod expr;
pub mod generated;
pub mod pipeline;
pub mod validator;
pub mod workflow_schema;

// Re-export key types at crate root for convenience
pub use display::{
    Bo4eView, EdifactView, IssueDisplay, IssueNarrator, IssueView, TechnicalNarrator,
};
pub use error::{ParseError, ValidationError};
pub use eval::{
    presence_condition, AbsentTarget, CodeListProvider, CompositeExternalProvider,
    ConditionEvaluator, ConditionExprEvaluator, ConditionResult, CountryPostalCodeProvider,
    EvaluationContext, GroupNavigator, KonfigurationenProvider, MapExternalProvider, MarketRole,
    MarketRoleProvider, NoOpGroupNavigator, Sector, SectorProvider,
};
pub use expr::{ConditionExpr, ConditionParser};
pub use validator::{
    build_validated_tree, validate_unt_segment_count, AhbGroupNode, AhbNode, EdifactValidator,
    ErrorCodes, IssueKind, SegmentPosition, Severity, UnresolvedConditions, ValidatedTree,
    ValidationCategory, ValidationIssue, ValidationLevel, ValidationReport,
};

// Re-export AHB workflow types for callers
pub use evaluator_factory::evaluator_for;
pub use pipeline::validate_edifact_message;
pub use validator::validate::{AhbCodeRule, AhbFieldRule, AhbWorkflow};
pub use workflow_schema::ahb_workflow_from_pid_schema;

// Re-export generated evaluators
pub use generated::*;

// `IssueKind::StructureDiagnostic`'s `kind` field is this type, so a
// dependant matching on `IssueKind` needs it without adding its own
// version-pinned dependency on `mig-assembly`.
pub use mig_assembly::StructureDiagnosticKind;