use crate::eval::ConditionEvaluator;
pub fn evaluator_for(variant: &str, fv: &str) -> Option<Box<dyn ConditionEvaluator>> {
match (variant, fv) {
("APERAK", "FV2504") => Some(Box::new(crate::AperakConditionEvaluatorFV2504::default())),
("COMDIS", "FV2504") => Some(Box::new(crate::ComdisConditionEvaluatorFV2504::default())),
("CONTRL", "FV2504") => Some(Box::new(crate::ContrlConditionEvaluatorFV2504::default())),
("IFTSTA", "FV2504") => Some(Box::new(crate::IftstaConditionEvaluatorFV2504::default())),
("INVOIC", "FV2504") => Some(Box::new(crate::InvoicConditionEvaluatorFV2504::default())),
("MSCONS", "FV2504") => Some(Box::new(crate::MsconsConditionEvaluatorFV2504::default())),
("ORDCHG", "FV2504") => Some(Box::new(crate::OrdchgConditionEvaluatorFV2504::default())),
("ORDERS", "FV2504") => Some(Box::new(crate::OrdersConditionEvaluatorFV2504::default())),
("ORDRSP", "FV2504") => Some(Box::new(crate::OrdrspConditionEvaluatorFV2504::default())),
("PARTIN", "FV2504") => Some(Box::new(crate::PartinConditionEvaluatorFV2504::default())),
("PRICAT", "FV2504") => Some(Box::new(crate::PricatConditionEvaluatorFV2504::default())),
("QUOTES", "FV2504") => Some(Box::new(crate::QuotesConditionEvaluatorFV2504::default())),
("REMADV", "FV2504") => Some(Box::new(crate::RemadvConditionEvaluatorFV2504::default())),
("REQOTE", "FV2504") => Some(Box::new(crate::ReqoteConditionEvaluatorFV2504::default())),
("UTILMD_Gas", "FV2504") => {
Some(Box::new(crate::UtilmdGasConditionEvaluatorFV2504::default()))
}
("UTILMD_Strom", "FV2504") => Some(Box::new(
crate::UtilmdStromConditionEvaluatorFV2504::default(),
)),
("UTILTS", "FV2504") => Some(Box::new(crate::UtiltsConditionEvaluatorFV2504::default())),
("APERAK", "FV2510") => Some(Box::new(crate::AperakConditionEvaluatorFV2510::default())),
("COMDIS", "FV2510") => Some(Box::new(crate::ComdisConditionEvaluatorFV2510::default())),
("CONTRL", "FV2510") => Some(Box::new(crate::ContrlConditionEvaluatorFV2510::default())),
("IFTSTA", "FV2510") => Some(Box::new(crate::IftstaConditionEvaluatorFV2510::default())),
("INSRPT", "FV2510") => Some(Box::new(crate::InsrptConditionEvaluatorFV2510::default())),
("INVOIC", "FV2510") => Some(Box::new(crate::InvoicConditionEvaluatorFV2510::default())),
("MSCONS", "FV2510") => Some(Box::new(crate::MsconsConditionEvaluatorFV2510::default())),
("ORDCHG", "FV2510") => Some(Box::new(crate::OrdchgConditionEvaluatorFV2510::default())),
("ORDERS", "FV2510") => Some(Box::new(crate::OrdersConditionEvaluatorFV2510::default())),
("ORDRSP", "FV2510") => Some(Box::new(crate::OrdrspConditionEvaluatorFV2510::default())),
("PARTIN", "FV2510") => Some(Box::new(crate::PartinConditionEvaluatorFV2510::default())),
("PRICAT", "FV2510") => Some(Box::new(crate::PricatConditionEvaluatorFV2510::default())),
("QUOTES", "FV2510") => Some(Box::new(crate::QuotesConditionEvaluatorFV2510::default())),
("REMADV", "FV2510") => Some(Box::new(crate::RemadvConditionEvaluatorFV2510::default())),
("REQOTE", "FV2510") => Some(Box::new(crate::ReqoteConditionEvaluatorFV2510::default())),
("UTILMD_Gas", "FV2510") => {
Some(Box::new(crate::UtilmdGasConditionEvaluatorFV2510::default()))
}
("UTILMD_Strom", "FV2510") => Some(Box::new(
crate::UtilmdStromConditionEvaluatorFV2510::default(),
)),
("UTILTS", "FV2510") => Some(Box::new(crate::UtiltsConditionEvaluatorFV2510::default())),
("APERAK", "FV2604") => Some(Box::new(crate::AperakConditionEvaluatorFV2604::default())),
("COMDIS", "FV2604") => Some(Box::new(crate::ComdisConditionEvaluatorFV2604::default())),
("CONTRL", "FV2604") => Some(Box::new(crate::ContrlConditionEvaluatorFV2604::default())),
("IFTSTA", "FV2604") => Some(Box::new(crate::IftstaConditionEvaluatorFV2604::default())),
("INSRPT", "FV2604") => Some(Box::new(crate::InsrptConditionEvaluatorFV2604::default())),
("INVOIC", "FV2604") => Some(Box::new(crate::InvoicConditionEvaluatorFV2604::default())),
("MSCONS", "FV2604") => Some(Box::new(crate::MsconsConditionEvaluatorFV2604::default())),
("ORDCHG", "FV2604") => Some(Box::new(crate::OrdchgConditionEvaluatorFV2604::default())),
("ORDERS", "FV2604") => Some(Box::new(crate::OrdersConditionEvaluatorFV2604::default())),
("ORDRSP", "FV2604") => Some(Box::new(crate::OrdrspConditionEvaluatorFV2604::default())),
("PARTIN", "FV2604") => Some(Box::new(crate::PartinConditionEvaluatorFV2604::default())),
("PRICAT", "FV2604") => Some(Box::new(crate::PricatConditionEvaluatorFV2604::default())),
("QUOTES", "FV2604") => Some(Box::new(crate::QuotesConditionEvaluatorFV2604::default())),
("REMADV", "FV2604") => Some(Box::new(crate::RemadvConditionEvaluatorFV2604::default())),
("REQOTE", "FV2604") => Some(Box::new(crate::ReqoteConditionEvaluatorFV2604::default())),
("UTILMD_Gas", "FV2604") => {
Some(Box::new(crate::UtilmdGasConditionEvaluatorFV2604::default()))
}
("UTILMD_Strom", "FV2604") => Some(Box::new(
crate::UtilmdStromConditionEvaluatorFV2604::default(),
)),
("UTILTS", "FV2604") => Some(Box::new(crate::UtiltsConditionEvaluatorFV2604::default())),
("APERAK", "FV2610") => Some(Box::new(crate::AperakConditionEvaluatorFV2610::default())),
("COMDIS", "FV2610") => Some(Box::new(crate::ComdisConditionEvaluatorFV2610::default())),
("CONTRL", "FV2610") => Some(Box::new(crate::ContrlConditionEvaluatorFV2610::default())),
("IFTSTA", "FV2610") => Some(Box::new(crate::IftstaConditionEvaluatorFV2610::default())),
("INSRPT", "FV2610") => Some(Box::new(crate::InsrptConditionEvaluatorFV2610::default())),
("INVOIC", "FV2610") => Some(Box::new(crate::InvoicConditionEvaluatorFV2610::default())),
("MSCONS", "FV2610") => Some(Box::new(crate::MsconsConditionEvaluatorFV2610::default())),
("ORDCHG", "FV2610") => Some(Box::new(crate::OrdchgConditionEvaluatorFV2610::default())),
("ORDERS", "FV2610") => Some(Box::new(crate::OrdersConditionEvaluatorFV2610::default())),
("ORDRSP", "FV2610") => Some(Box::new(crate::OrdrspConditionEvaluatorFV2610::default())),
("PARTIN", "FV2610") => Some(Box::new(crate::PartinConditionEvaluatorFV2610::default())),
("PRICAT", "FV2610") => Some(Box::new(crate::PricatConditionEvaluatorFV2610::default())),
("QUOTES", "FV2610") => Some(Box::new(crate::QuotesConditionEvaluatorFV2610::default())),
("REMADV", "FV2610") => Some(Box::new(crate::RemadvConditionEvaluatorFV2610::default())),
("REQOTE", "FV2610") => Some(Box::new(crate::ReqoteConditionEvaluatorFV2610::default())),
("UTILMD_Gas", "FV2610") => {
Some(Box::new(crate::UtilmdGasConditionEvaluatorFV2610::default()))
}
("UTILMD_Strom", "FV2610") => Some(Box::new(
crate::UtilmdStromConditionEvaluatorFV2610::default(),
)),
("UTILTS", "FV2610") => Some(Box::new(crate::UtiltsConditionEvaluatorFV2610::default())),
_ => None,
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn every_exported_evaluator_resolves_under_its_own_name() {
for (variant, fv) in [
("UTILMD_Strom", "FV2504"),
("UTILMD_Strom", "FV2604"),
("UTILMD_Gas", "FV2610"),
("MSCONS", "FV2610"),
("INSRPT", "FV2510"),
] {
let e = evaluator_for(variant, fv).unwrap_or_else(|| panic!("{variant} {fv}"));
assert_eq!(e.message_type(), variant);
}
assert!(
evaluator_for("INSRPT", "FV2504").is_none(),
"INSRPT has no FV2504 AHB"
);
assert!(evaluator_for("NONEXISTENT", "FV2504").is_none());
}
}