Skip to main content

automapper_validation/
evaluator_factory.rs

1//! The condition evaluator for a message variant and format version.
2
3use crate::eval::ConditionEvaluator;
4
5/// Create the condition evaluator for `variant` (`"UTILMD_Strom"`, `"MSCONS"`, …)
6/// in format version `fv` (`"FV2604"`).
7///
8/// Returns `None` if no evaluator exists for the combination. The arms list
9/// every evaluator `generated/mod.rs` exports, aliases included, so a format
10/// version answered by another version's evaluator resolves here too.
11pub fn evaluator_for(variant: &str, fv: &str) -> Option<Box<dyn ConditionEvaluator>> {
12    match (variant, fv) {
13        // FV2504
14        ("APERAK", "FV2504") => Some(Box::new(crate::AperakConditionEvaluatorFV2504::default())),
15        ("COMDIS", "FV2504") => Some(Box::new(crate::ComdisConditionEvaluatorFV2504::default())),
16        ("CONTRL", "FV2504") => Some(Box::new(crate::ContrlConditionEvaluatorFV2504::default())),
17        ("IFTSTA", "FV2504") => Some(Box::new(crate::IftstaConditionEvaluatorFV2504::default())),
18        ("INVOIC", "FV2504") => Some(Box::new(crate::InvoicConditionEvaluatorFV2504::default())),
19        ("MSCONS", "FV2504") => Some(Box::new(crate::MsconsConditionEvaluatorFV2504::default())),
20        ("ORDCHG", "FV2504") => Some(Box::new(crate::OrdchgConditionEvaluatorFV2504::default())),
21        ("ORDERS", "FV2504") => Some(Box::new(crate::OrdersConditionEvaluatorFV2504::default())),
22        ("ORDRSP", "FV2504") => Some(Box::new(crate::OrdrspConditionEvaluatorFV2504::default())),
23        ("PARTIN", "FV2504") => Some(Box::new(crate::PartinConditionEvaluatorFV2504::default())),
24        ("PRICAT", "FV2504") => Some(Box::new(crate::PricatConditionEvaluatorFV2504::default())),
25        ("QUOTES", "FV2504") => Some(Box::new(crate::QuotesConditionEvaluatorFV2504::default())),
26        ("REMADV", "FV2504") => Some(Box::new(crate::RemadvConditionEvaluatorFV2504::default())),
27        ("REQOTE", "FV2504") => Some(Box::new(crate::ReqoteConditionEvaluatorFV2504::default())),
28        ("UTILMD_Gas", "FV2504") => {
29            Some(Box::new(crate::UtilmdGasConditionEvaluatorFV2504::default()))
30        }
31        ("UTILMD_Strom", "FV2504") => Some(Box::new(
32            crate::UtilmdStromConditionEvaluatorFV2504::default(),
33        )),
34        ("UTILTS", "FV2504") => Some(Box::new(crate::UtiltsConditionEvaluatorFV2504::default())),
35        // FV2510
36        ("APERAK", "FV2510") => Some(Box::new(crate::AperakConditionEvaluatorFV2510::default())),
37        ("COMDIS", "FV2510") => Some(Box::new(crate::ComdisConditionEvaluatorFV2510::default())),
38        ("CONTRL", "FV2510") => Some(Box::new(crate::ContrlConditionEvaluatorFV2510::default())),
39        ("IFTSTA", "FV2510") => Some(Box::new(crate::IftstaConditionEvaluatorFV2510::default())),
40        ("INSRPT", "FV2510") => Some(Box::new(crate::InsrptConditionEvaluatorFV2510::default())),
41        ("INVOIC", "FV2510") => Some(Box::new(crate::InvoicConditionEvaluatorFV2510::default())),
42        ("MSCONS", "FV2510") => Some(Box::new(crate::MsconsConditionEvaluatorFV2510::default())),
43        ("ORDCHG", "FV2510") => Some(Box::new(crate::OrdchgConditionEvaluatorFV2510::default())),
44        ("ORDERS", "FV2510") => Some(Box::new(crate::OrdersConditionEvaluatorFV2510::default())),
45        ("ORDRSP", "FV2510") => Some(Box::new(crate::OrdrspConditionEvaluatorFV2510::default())),
46        ("PARTIN", "FV2510") => Some(Box::new(crate::PartinConditionEvaluatorFV2510::default())),
47        ("PRICAT", "FV2510") => Some(Box::new(crate::PricatConditionEvaluatorFV2510::default())),
48        ("QUOTES", "FV2510") => Some(Box::new(crate::QuotesConditionEvaluatorFV2510::default())),
49        ("REMADV", "FV2510") => Some(Box::new(crate::RemadvConditionEvaluatorFV2510::default())),
50        ("REQOTE", "FV2510") => Some(Box::new(crate::ReqoteConditionEvaluatorFV2510::default())),
51        ("UTILMD_Gas", "FV2510") => {
52            Some(Box::new(crate::UtilmdGasConditionEvaluatorFV2510::default()))
53        }
54        ("UTILMD_Strom", "FV2510") => Some(Box::new(
55            crate::UtilmdStromConditionEvaluatorFV2510::default(),
56        )),
57        ("UTILTS", "FV2510") => Some(Box::new(crate::UtiltsConditionEvaluatorFV2510::default())),
58        // FV2604
59        ("APERAK", "FV2604") => Some(Box::new(crate::AperakConditionEvaluatorFV2604::default())),
60        ("COMDIS", "FV2604") => Some(Box::new(crate::ComdisConditionEvaluatorFV2604::default())),
61        ("CONTRL", "FV2604") => Some(Box::new(crate::ContrlConditionEvaluatorFV2604::default())),
62        ("IFTSTA", "FV2604") => Some(Box::new(crate::IftstaConditionEvaluatorFV2604::default())),
63        ("INSRPT", "FV2604") => Some(Box::new(crate::InsrptConditionEvaluatorFV2604::default())),
64        ("INVOIC", "FV2604") => Some(Box::new(crate::InvoicConditionEvaluatorFV2604::default())),
65        ("MSCONS", "FV2604") => Some(Box::new(crate::MsconsConditionEvaluatorFV2604::default())),
66        ("ORDCHG", "FV2604") => Some(Box::new(crate::OrdchgConditionEvaluatorFV2604::default())),
67        ("ORDERS", "FV2604") => Some(Box::new(crate::OrdersConditionEvaluatorFV2604::default())),
68        ("ORDRSP", "FV2604") => Some(Box::new(crate::OrdrspConditionEvaluatorFV2604::default())),
69        ("PARTIN", "FV2604") => Some(Box::new(crate::PartinConditionEvaluatorFV2604::default())),
70        ("PRICAT", "FV2604") => Some(Box::new(crate::PricatConditionEvaluatorFV2604::default())),
71        ("QUOTES", "FV2604") => Some(Box::new(crate::QuotesConditionEvaluatorFV2604::default())),
72        ("REMADV", "FV2604") => Some(Box::new(crate::RemadvConditionEvaluatorFV2604::default())),
73        ("REQOTE", "FV2604") => Some(Box::new(crate::ReqoteConditionEvaluatorFV2604::default())),
74        ("UTILMD_Gas", "FV2604") => {
75            Some(Box::new(crate::UtilmdGasConditionEvaluatorFV2604::default()))
76        }
77        ("UTILMD_Strom", "FV2604") => Some(Box::new(
78            crate::UtilmdStromConditionEvaluatorFV2604::default(),
79        )),
80        ("UTILTS", "FV2604") => Some(Box::new(crate::UtiltsConditionEvaluatorFV2604::default())),
81        // FV2610
82        ("APERAK", "FV2610") => Some(Box::new(crate::AperakConditionEvaluatorFV2610::default())),
83        ("COMDIS", "FV2610") => Some(Box::new(crate::ComdisConditionEvaluatorFV2610::default())),
84        ("CONTRL", "FV2610") => Some(Box::new(crate::ContrlConditionEvaluatorFV2610::default())),
85        ("IFTSTA", "FV2610") => Some(Box::new(crate::IftstaConditionEvaluatorFV2610::default())),
86        ("INSRPT", "FV2610") => Some(Box::new(crate::InsrptConditionEvaluatorFV2610::default())),
87        ("INVOIC", "FV2610") => Some(Box::new(crate::InvoicConditionEvaluatorFV2610::default())),
88        ("MSCONS", "FV2610") => Some(Box::new(crate::MsconsConditionEvaluatorFV2610::default())),
89        ("ORDCHG", "FV2610") => Some(Box::new(crate::OrdchgConditionEvaluatorFV2610::default())),
90        ("ORDERS", "FV2610") => Some(Box::new(crate::OrdersConditionEvaluatorFV2610::default())),
91        ("ORDRSP", "FV2610") => Some(Box::new(crate::OrdrspConditionEvaluatorFV2610::default())),
92        ("PARTIN", "FV2610") => Some(Box::new(crate::PartinConditionEvaluatorFV2610::default())),
93        ("PRICAT", "FV2610") => Some(Box::new(crate::PricatConditionEvaluatorFV2610::default())),
94        ("QUOTES", "FV2610") => Some(Box::new(crate::QuotesConditionEvaluatorFV2610::default())),
95        ("REMADV", "FV2610") => Some(Box::new(crate::RemadvConditionEvaluatorFV2610::default())),
96        ("REQOTE", "FV2610") => Some(Box::new(crate::ReqoteConditionEvaluatorFV2610::default())),
97        ("UTILMD_Gas", "FV2610") => {
98            Some(Box::new(crate::UtilmdGasConditionEvaluatorFV2610::default()))
99        }
100        ("UTILMD_Strom", "FV2610") => Some(Box::new(
101            crate::UtilmdStromConditionEvaluatorFV2610::default(),
102        )),
103        ("UTILTS", "FV2610") => Some(Box::new(crate::UtiltsConditionEvaluatorFV2610::default())),
104        _ => None,
105    }
106}
107
108#[cfg(test)]
109mod tests {
110    use super::*;
111
112    #[test]
113    fn every_exported_evaluator_resolves_under_its_own_name() {
114        for (variant, fv) in [
115            ("UTILMD_Strom", "FV2504"),
116            ("UTILMD_Strom", "FV2604"),
117            ("UTILMD_Gas", "FV2610"),
118            ("MSCONS", "FV2610"),
119            ("INSRPT", "FV2510"),
120        ] {
121            let e = evaluator_for(variant, fv).unwrap_or_else(|| panic!("{variant} {fv}"));
122            assert_eq!(e.message_type(), variant);
123        }
124        assert!(
125            evaluator_for("INSRPT", "FV2504").is_none(),
126            "INSRPT has no FV2504 AHB"
127        );
128        assert!(evaluator_for("NONEXISTENT", "FV2504").is_none());
129    }
130}