automapper-validation 0.12.0

AHB condition expression parsing, evaluation, and EDIFACT validation
Documentation
// <auto-generated>
// Generated by automapper-generator generate-conditions
// AHB: xml-migs-and-ahbs/FV2510/UTILTS_AHB_1_0_Fehlerkorrektur_20260327.xml
// Generated: 2026-09-23T08:11:56Z
// Delegates unchanged conditions to UtiltsConditionEvaluatorFV2504 (FV2504).
// </auto-generated>

#![allow(clippy::style, clippy::complexity)]

#[allow(unused_imports)]
use crate::eval::format_validators::*;
use crate::eval::{ConditionEvaluator, ConditionResult, EvaluationContext};
use crate::generated::fv2504::UtiltsConditionEvaluatorFV2504;

/// Condition evaluator for UTILTS FV2510.
///
/// Delegates to [`UtiltsConditionEvaluatorFV2504`] for conditions whose AHB description is
/// unchanged from that version. Local overrides: [63].
pub struct UtiltsConditionEvaluatorFV2510 {
    fallback: UtiltsConditionEvaluatorFV2504,
}

impl Default for UtiltsConditionEvaluatorFV2510 {
    fn default() -> Self {
        Self {
            fallback: UtiltsConditionEvaluatorFV2504::default(),
        }
    }
}

/// Condition IDs whose implementation differs from the fallback.
const FV2510_OVERRIDES: &[u32] = &[63];

/// Overrides that require context from outside the message.
const FV2510_EXTERNAL: &[u32] = &[63];

impl ConditionEvaluator for UtiltsConditionEvaluatorFV2510 {
    fn message_type(&self) -> &str {
        "UTILTS"
    }

    fn format_version(&self) -> &str {
        "FV2510"
    }

    fn evaluate(&self, condition: u32, ctx: &EvaluationContext) -> ConditionResult {
        match condition {
            63 => self.evaluate_63(ctx),
            other => self.fallback.evaluate(other, ctx),
        }
    }

    fn is_external(&self, condition: u32) -> bool {
        if FV2510_OVERRIDES.contains(&condition) {
            FV2510_EXTERNAL.contains(&condition)
        } else {
            self.fallback.is_external(condition)
        }
    }

    fn is_known(&self, condition: u32) -> bool {
        FV2510_OVERRIDES.contains(&condition) || self.fallback.is_known(condition)
    }
}

impl UtiltsConditionEvaluatorFV2510 {
    /// [63] Wenn MP-ID in SG2 NAD+MR (Nachrichtenempfänger) in der Rolle NB
    /// EXTERNAL: Requires context from outside the message.
    fn evaluate_63(&self, ctx: &EvaluationContext) -> ConditionResult {
        ctx.external.evaluate("recipient_is_nb")
    }
}