1use crate::eval::ConditionEvaluator;
4
5pub fn evaluator_for(variant: &str, fv: &str) -> Option<Box<dyn ConditionEvaluator>> {
12 match (variant, fv) {
13 ("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 ("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 ("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 ("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}