pub const GPKE_LIEFERBEGINN_ANMELDEN: &str = "gpke.lieferbeginn.anmelden";
pub const GPKE_LIEFERBEGINN_BESTAETIGEN: &str = "gpke.lieferbeginn.bestaetigen";
pub const GPKE_NEUANLAGE_BESTAETIGEN: &str = "gpke.neuanlage.bestaetigen";
pub const GPKE_NEUANLAGE_ABLEHNEN: &str = "gpke.neuanlage.ablehnen";
pub const GPKE_EOG_ANMELDEN: &str = "gpke.eog.anmelden";
pub const GPKE_EOG_BESTAETIGEN: &str = "gpke.eog.bestaetigen";
pub const GPKE_EOG_ABLEHNEN: &str = "gpke.eog.ablehnen";
pub const GPKE_LIEFERBEGINN_ABLEHNEN: &str = "gpke.lieferbeginn.ablehnen";
pub const GPKE_LIEFERENDE_ANMELDEN: &str = "gpke.lieferende.anmelden";
pub const GPKE_KUENDIGUNG_ANMELDEN: &str = "gpke.kuendigung.anmelden";
pub const GPKE_LIEFERENDE_BESTAETIGEN: &str = "gpke.lieferende.bestaetigen";
pub const GPKE_LIEFERENDE_ABLEHNEN: &str = "gpke.lieferende.ablehnen";
pub const GPKE_NB_LIEFERENDE_BESTAETIGEN: &str = "gpke.nb-lieferende.bestaetigen";
pub const GPKE_NB_LIEFERENDE_ABLEHNEN: &str = "gpke.nb-lieferende.ablehnen";
pub const GPKE_BEENDIGUNG_ZUORDNUNG_BESTAETIGEN: &str = "gpke.beendigung-zuordnung.bestaetigen";
pub const GPKE_BEENDIGUNG_ZUORDNUNG_ABLEHNEN: &str = "gpke.beendigung-zuordnung.ablehnen";
pub const GPKE_BEENDIGUNG_ZUORDNUNG_ANFRAGEN: &str = "gpke.beendigung-zuordnung.anfragen";
pub const GPKE_ZUORDNUNG_INFORMIEREN: &str = "gpke.zuordnung.informieren";
pub const GPKE_ZUORDNUNG_BEENDEN: &str = "gpke.zuordnung.beenden";
pub const GPKE_ZUORDNUNG_AUFHEBEN: &str = "gpke.zuordnung.aufheben";
pub const GPKE_MSB_ZUORDNUNG_BEENDEN: &str = "gpke.msb-zuordnung.beenden";
pub const GPKE_SPERRUNG_BEAUFTRAGEN: &str = "gpke.sperrung.beauftragen";
pub const GPKE_ENTSPERRUNG_BEAUFTRAGEN: &str = "gpke.entsperrung.beauftragen";
pub const GPKE_SPERRUNG_BESTAETIGEN: &str = "gpke.sperrung.bestaetigen";
pub const GPKE_SPERRUNG_FEHLGESCHLAGEN: &str = "gpke.sperrung.fehlgeschlagen";
pub const GELI_LIEFERBEGINN_ANMELDEN: &str = "geli.lieferbeginn.anmelden";
pub const GELI_LIEFERBEGINN_BESTAETIGEN: &str = "geli.lieferbeginn.bestaetigen";
pub const GELI_LIEFERBEGINN_ABLEHNEN: &str = "geli.lieferbeginn.ablehnen";
pub const GELI_LIEFERENDE_ANMELDEN: &str = "geli.lieferende.anmelden";
pub const GELI_KUENDIGUNG_ANMELDEN: &str = "geli.kuendigung.anmelden";
pub const GELI_LIEFERENDE_BESTAETIGEN: &str = "geli.lieferende.bestaetigen";
pub const GELI_LIEFERENDE_ABLEHNEN: &str = "geli.lieferende.ablehnen";
pub const GELI_STORNIERUNG_INITIIEREN: &str = "geli.stornierung.initiieren";
pub const GELI_EOG_ANMELDEN: &str = "geli.eog.anmelden";
pub const WIM_GERAETEWECHSEL_BESTAETIGEN: &str = "wim.geraetewechsel.bestaetigen";
pub const WIM_GERAETEWECHSEL_ABLEHNEN: &str = "wim.geraetewechsel.ablehnen";
pub const WIM_STEUERUNGSAUFTRAG_BESTAETIGEN: &str = "wim.steuerungsauftrag.bestaetigen";
pub const WIM_STEUERUNGSAUFTRAG_ABLEHNEN: &str = "wim.steuerungsauftrag.ablehnen";
pub const WIM_PREISANFRAGE_ANGEBOT_SENDEN: &str = "wim.preisanfrage.angebot-senden";
pub const WIM_WERTEBESTELLUNG_ANBIETEN: &str = "wim.wertebestellung.anbieten";
pub const WIM_WERTEBESTELLUNG_ANFRAGE_ABLEHNEN: &str = "wim.wertebestellung.anfrage-ablehnen";
pub const WIM_WERTEBESTELLUNG_BESTELLUNG_BEANTWORTEN: &str =
"wim.wertebestellung.bestellung-beantworten";
pub const WIM_WERTEBESTELLUNG_ABBESTELLUNG_BEANTWORTEN: &str =
"wim.wertebestellung.abbestellung-beantworten";
pub const WIM_WERTEBESTELLUNG_STORNIERUNG_BEANTWORTEN: &str =
"wim.wertebestellung.stornierung-beantworten";
pub const ESA_ABBESTELLUNG_BEAUFTRAGEN: &str = "esa.abbestellung.beauftragen";
pub const GPKE_ZUORDNUNG_LF_BESTAETIGEN: &str = "gpke.zuordnung-lf.bestaetigen";
pub const GPKE_ZUORDNUNG_LF_ABLEHNEN: &str = "gpke.zuordnung-lf.ablehnen";
pub const GPKE_KUENDIGUNG_BESTAETIGEN: &str = "gpke.kuendigung.bestaetigen";
pub const GPKE_KUENDIGUNG_ABLEHNEN: &str = "gpke.kuendigung.ablehnen";
pub const GELI_NB_LIEFERENDE_BESTAETIGEN: &str = "geli.nb-lieferende.bestaetigen";
pub const GELI_NB_LIEFERENDE_ABLEHNEN: &str = "geli.nb-lieferende.ablehnen";
pub const GELI_BEENDIGUNG_ZUORDNUNG_BESTAETIGEN: &str = "geli.beendigung-zuordnung.bestaetigen";
pub const GELI_BEENDIGUNG_ZUORDNUNG_ABLEHNEN: &str = "geli.beendigung-zuordnung.ablehnen";
pub const GELI_ZUORDNUNG_INFORMIEREN: &str = "geli.zuordnung.informieren";
pub const GELI_ZUORDNUNG_BEENDEN: &str = "geli.zuordnung.beenden";
pub const GELI_ZUORDNUNG_AUFHEBEN: &str = "geli.zuordnung.aufheben";
pub const GELI_KUENDIGUNG_BESTAETIGEN: &str = "geli.kuendigung.bestaetigen";
pub const GELI_KUENDIGUNG_ABLEHNEN: &str = "geli.kuendigung.ablehnen";
pub const GELI_EOG_BESTAETIGEN: &str = "geli.eog.bestaetigen";
pub const GELI_EOG_ABLEHNEN: &str = "geli.eog.ablehnen";
pub const GPKE_ABRECHNUNG_ANNEHMEN: &str = "gpke.abrechnung.annehmen";
pub const GPKE_ABRECHNUNG_ABLEHNEN: &str = "gpke.abrechnung.ablehnen";
pub const WIM_RECHNUNG_ANNEHMEN: &str = "wim.rechnung.annehmen";
pub const WIM_RECHNUNG_ABLEHNEN: &str = "wim.rechnung.ablehnen";
pub const GABI_RECHNUNG_ANNEHMEN: &str = "gabi.rechnung.annehmen";
pub const GABI_RECHNUNG_ABLEHNEN: &str = "gabi.rechnung.ablehnen";
pub const INVOIC_STORNORECHNUNG_ANNEHMEN: &str = "invoic.stornorechnung.annehmen";
pub const INVOIC_STORNORECHNUNG_ABLEHNEN: &str = "invoic.stornorechnung.ablehnen";
pub const INVOIC_SONSTIGE_LEISTUNG_ANNEHMEN: &str = "invoic.sonstige-leistung.annehmen";
pub const INVOIC_SONSTIGE_LEISTUNG_ABLEHNEN: &str = "invoic.sonstige-leistung.ablehnen";
pub const INVOIC_NNE_ABSCHLAG_STELLEN: &str = "invoic.nne-abschlag.stellen";
pub const INVOIC_NNE_STELLEN: &str = "invoic.nne.stellen";
pub const INVOIC_MMM_STELLEN: &str = "invoic.mmm.stellen";
pub const INVOIC_SONSTIGE_LEISTUNG_STELLEN: &str = "invoic.sonstige-leistung.stellen";
pub const WIM_MSB_RECHNUNG_STELLEN: &str = "wim.msb-rechnung.stellen";
pub const GPKE_ABRECHNUNG_SELBSTAUSSTELLEN: &str = "gpke.abrechnung.selbstausstellen";
pub const MABIS_LISTE_KORRIGIEREN: &str = "mabis.liste.korrigieren";
pub const MABIS_LISTE_ABLEHNEN: &str = "mabis.liste.ablehnen";
pub const MABIS_SUMMENZEITREIHE_UEBERMITTELN: &str = "mabis.summenzeitreihe.uebermitteln";
pub const DISPATCHED_BY_SERVICES: &[&str] = &[
GPKE_LIEFERBEGINN_ANMELDEN,
GPKE_EOG_ANMELDEN,
GPKE_EOG_BESTAETIGEN,
GPKE_EOG_ABLEHNEN,
GPKE_LIEFERBEGINN_BESTAETIGEN,
GPKE_LIEFERBEGINN_ABLEHNEN,
GPKE_NEUANLAGE_BESTAETIGEN,
GPKE_NEUANLAGE_ABLEHNEN,
GPKE_LIEFERENDE_ANMELDEN,
GPKE_KUENDIGUNG_ANMELDEN,
GPKE_LIEFERENDE_BESTAETIGEN,
GPKE_LIEFERENDE_ABLEHNEN,
GPKE_NB_LIEFERENDE_BESTAETIGEN,
GPKE_NB_LIEFERENDE_ABLEHNEN,
GPKE_BEENDIGUNG_ZUORDNUNG_BESTAETIGEN,
GPKE_BEENDIGUNG_ZUORDNUNG_ABLEHNEN,
GPKE_BEENDIGUNG_ZUORDNUNG_ANFRAGEN,
GPKE_ZUORDNUNG_INFORMIEREN,
GPKE_ZUORDNUNG_BEENDEN,
GPKE_ZUORDNUNG_AUFHEBEN,
GPKE_MSB_ZUORDNUNG_BEENDEN,
GPKE_ZUORDNUNG_LF_BESTAETIGEN,
GPKE_ZUORDNUNG_LF_ABLEHNEN,
GPKE_KUENDIGUNG_BESTAETIGEN,
GPKE_KUENDIGUNG_ABLEHNEN,
GELI_NB_LIEFERENDE_BESTAETIGEN,
GELI_NB_LIEFERENDE_ABLEHNEN,
GELI_BEENDIGUNG_ZUORDNUNG_BESTAETIGEN,
GELI_BEENDIGUNG_ZUORDNUNG_ABLEHNEN,
GELI_ZUORDNUNG_INFORMIEREN,
GELI_ZUORDNUNG_BEENDEN,
GELI_ZUORDNUNG_AUFHEBEN,
GELI_KUENDIGUNG_BESTAETIGEN,
GELI_KUENDIGUNG_ABLEHNEN,
GELI_EOG_BESTAETIGEN,
GELI_EOG_ABLEHNEN,
GELI_LIEFERBEGINN_ANMELDEN,
GELI_LIEFERBEGINN_BESTAETIGEN,
GELI_LIEFERBEGINN_ABLEHNEN,
GELI_LIEFERENDE_ANMELDEN,
GELI_KUENDIGUNG_ANMELDEN,
GELI_LIEFERENDE_BESTAETIGEN,
GELI_LIEFERENDE_ABLEHNEN,
GELI_STORNIERUNG_INITIIEREN,
WIM_GERAETEWECHSEL_BESTAETIGEN,
WIM_GERAETEWECHSEL_ABLEHNEN,
WIM_STEUERUNGSAUFTRAG_BESTAETIGEN,
WIM_STEUERUNGSAUFTRAG_ABLEHNEN,
WIM_PREISANFRAGE_ANGEBOT_SENDEN,
GPKE_ABRECHNUNG_ANNEHMEN,
GPKE_ABRECHNUNG_ABLEHNEN,
WIM_RECHNUNG_ANNEHMEN,
WIM_RECHNUNG_ABLEHNEN,
GABI_RECHNUNG_ANNEHMEN,
GABI_RECHNUNG_ABLEHNEN,
INVOIC_STORNORECHNUNG_ANNEHMEN,
INVOIC_STORNORECHNUNG_ABLEHNEN,
INVOIC_SONSTIGE_LEISTUNG_ANNEHMEN,
INVOIC_SONSTIGE_LEISTUNG_ABLEHNEN,
MABIS_LISTE_KORRIGIEREN,
MABIS_LISTE_ABLEHNEN,
MABIS_SUMMENZEITREIHE_UEBERMITTELN,
GPKE_SPERRUNG_BEAUFTRAGEN,
GPKE_ENTSPERRUNG_BEAUFTRAGEN,
GPKE_SPERRUNG_BESTAETIGEN,
GPKE_SPERRUNG_FEHLGESCHLAGEN,
GELI_EOG_ANMELDEN,
WIM_WERTEBESTELLUNG_ANBIETEN,
WIM_WERTEBESTELLUNG_ANFRAGE_ABLEHNEN,
WIM_WERTEBESTELLUNG_BESTELLUNG_BEANTWORTEN,
WIM_WERTEBESTELLUNG_ABBESTELLUNG_BEANTWORTEN,
WIM_WERTEBESTELLUNG_STORNIERUNG_BEANTWORTEN,
ESA_ABBESTELLUNG_BEAUFTRAGEN,
INVOIC_NNE_ABSCHLAG_STELLEN,
INVOIC_NNE_STELLEN,
INVOIC_MMM_STELLEN,
INVOIC_SONSTIGE_LEISTUNG_STELLEN,
WIM_MSB_RECHNUNG_STELLEN,
GPKE_ABRECHNUNG_SELBSTAUSSTELLEN,
];
pub const MAKOD_INTERNAL: &[(&str, &str)] = &[];
#[cfg(test)]
mod tests {
use super::{DISPATCHED_BY_SERVICES, MAKOD_INTERNAL};
#[test]
fn every_constant_is_accounted_for() {
let src = include_str!("commands.rs");
let listed: Vec<&str> = listed_names(src);
let internal: Vec<&str> = MAKOD_INTERNAL.iter().map(|(n, _)| *n).collect();
let mut orphans = Vec::new();
for name in exported_str_constants(src) {
if !listed.contains(&name.as_str()) && !internal.contains(&name.as_str()) {
orphans.push(name);
}
}
assert!(
orphans.is_empty(),
"{} command constant(s) in neither DISPATCHED_BY_SERVICES nor MAKOD_INTERNAL: \
{}.\n A constant no service posts is a second spelling of a wire name that \
nothing holds to makod's registry — delete it, or list it in MAKOD_INTERNAL \
with the reason it belongs in the shared catalogue.",
orphans.len(),
orphans.join(", ")
);
assert!(
listed.len() == DISPATCHED_BY_SERVICES.len() && listed.len() > 60,
"the DISPATCHED_BY_SERVICES reader found {} of {} entries",
listed.len(),
DISPATCHED_BY_SERVICES.len()
);
}
fn exported_str_constants(src: &str) -> Vec<String> {
src.lines()
.filter_map(|line| {
let rest = line.trim().strip_prefix("pub const ")?;
let (name, tail) = rest.split_once(':')?;
tail.trim_start()
.starts_with("&str")
.then(|| name.trim().to_owned())
})
.collect()
}
fn listed_names(src: &str) -> Vec<&str> {
let start = src
.find("pub const DISPATCHED_BY_SERVICES")
.expect("the list is declared here");
let open = start + src[start..].find("= &[").expect("the list opens") + 4;
let close = open + src[open..].find(']').expect("the list closes");
src[open..close]
.split(',')
.map(str::trim)
.filter(|e| !e.is_empty())
.collect()
}
#[test]
fn an_unlisted_constant_is_refused() {
let src = concat!(
"pub const A: &str = \"gpke.a.b\";\n",
"pub const B: &str = \"gpke.c.d\";\n",
"pub const DISPATCHED_BY_SERVICES: &[&str] = &[\n A,\n];\n",
);
assert_eq!(
exported_str_constants(src),
vec!["A".to_owned(), "B".to_owned()]
);
assert_eq!(listed_names(src), vec!["A"]);
}
}