rubo4e 0.9.0

Rust implementation of the BO4E energy-market data standard
Documentation
//! Exact BO4E wire-key ↔ Rust snake_case field-name mapping.
//!
//! Used by `crate::json::key_transform` to convert JSON keys for
//! `to_json_snake_case` / `from_json_snake_case`. Both tables are sorted by
//! their first element so lookups can binary-search, and every entry is
//! `&'static str`, so a hit never allocates.
//!
//! Only pairs whose two sides differ are listed; any key that is absent maps
//! to itself. Underscore-prefixed BO4E metadata keys (`_typ`, `_version`,
//! `_id`) are deliberately absent so they survive verbatim in every mode.
/// BO4E wire (camelCase) → Rust snake_case, sorted by wire name.
pub(crate) static WIRE_TO_SNAKE: &[(&str, &str)] = &[
    ("A", "a"),
    ("B", "b"),
    ("C", "c"),
    ("D", "d"),
    ("aktuellerVerbrauch", "aktueller_verbrauch"),
    ("anfrageSubreferenz", "anfrage_subreferenz"),
    ("anteilProzent", "anteil_prozent"),
    ("anwendungVon", "anwendung_von"),
    ("anzahlAblesungen", "anzahl_ablesungen"),
    ("anzahlAbschlaege", "anzahl_abschlaege"),
    ("anzahlLieferstellen", "anzahl_lieferstellen"),
    ("artikelId", "artikel_id"),
    ("aufAbschlagstyp", "auf_abschlagstyp"),
    ("aufAbschlagsziel", "auf_abschlagsziel"),
    ("bdewArtikelnummer", "bdew_artikelnummer"),
    ("betragKostenposition", "betrag_kostenposition"),
    ("betreutDurch", "betreut_durch"),
    ("bilanzierungsgebietEic", "bilanzierungsgebiet_eic"),
    ("co2Emission", "co2_emission"),
    ("coErgaenzung", "co_ergaenzung"),
    ("detailsPrognosegrundlage", "details_prognosegrundlage"),
    (
        "dynamischePreispositionQuelle",
        "dynamische_preisposition_quelle",
    ),
    ("eichungBis", "eichung_bis"),
    ("eigenschaftMsbLokation", "eigenschaft_msb_lokation"),
    ("eigenschaftenGas", "eigenschaften_gas"),
    ("eigenschaftenStrom", "eigenschaften_strom"),
    ("einheitsPreispositionen", "einheits_preispositionen"),
    ("freimengeBlindarbeit", "freimenge_blindarbeit"),
    ("freimengeLeistungsfaktor", "freimenge_leistungsfaktor"),
    ("gebietcodeEic", "gebietcode_eic"),
    ("gemarkungFlur", "gemarkung_flur"),
    ("gesamtMenge", "gesamt_menge"),
    ("glaeubigerId", "glaeubiger_id"),
    (
        "grundWahlrechtPrognosegrundlage",
        "grund_wahlrecht_prognosegrundlage",
    ),
    ("grundzustaendigerMsbCodenr", "grundzustaendiger_msb_codenr"),
    (
        "grundzustaendigerMsbimCodenr",
        "grundzustaendiger_msbim_codenr",
    ),
    ("gruppenartikelId", "gruppenartikel_id"),
    ("hoechstpreisHT", "hoechstpreis_ht"),
    ("hoechstpreisNT", "hoechstpreis_nt"),
    ("idReferenz", "id_referenz"),
    ("individuelleAnrede", "individuelle_anrede"),
    ("inklusiveDienstleistungen", "inklusive_dienstleistungen"),
    ("inklusiveGeraete", "inklusive_geraete"),
    ("istAbrechnungsrelevant", "ist_abrechnungsrelevant"),
    ("istBevorzugterKontaktweg", "ist_bevorzugter_kontaktweg"),
    ("istEinspeisung", "ist_einspeisung"),
    ("istFernauslesbar", "ist_fernauslesbar"),
    ("istFernschaltbar", "ist_fernschaltbar"),
    ("istInOekoTopTen", "ist_in_oeko_top_ten"),
    ("istKostenpflichtig", "ist_kostenpflichtig"),
    ("istLastgangVorhanden", "ist_lastgang_vorhanden"),
    (
        "istMesspreisInGrundpreisEnthalten",
        "ist_messpreis_in_grundpreis_enthalten",
    ),
    (
        "istMesspreisZuBeruecksichtigen",
        "ist_messpreis_zu_beruecksichtigen",
    ),
    ("istOriginal", "ist_original"),
    ("istSchwachlastfaehig", "ist_schwachlastfaehig"),
    ("istSimuliert", "ist_simuliert"),
    ("istSteuerbefreit", "ist_steuerbefreit"),
    ("istStorno", "ist_storno"),
    ("istUnterbrechbar", "ist_unterbrechbar"),
    ("kundengruppeKA", "kundengruppe_ka"),
    ("kwInklusive", "kw_inklusive"),
    ("kwWeitereMengen", "kw_weitere_mengen"),
    (
        "lastvariablePreispositionen",
        "lastvariable_preispositionen",
    ),
    ("letzteEichung", "letzte_eichung"),
    ("linkPreisblatt", "link_preisblatt"),
    ("lokationsbuendelObjektcode", "lokationsbuendel_objektcode"),
    ("marktlokationsId", "marktlokations_id"),
    ("maximaleAbnahmemenge", "maximale_abnahmemenge"),
    ("messlokationsId", "messlokations_id"),
    ("minimaleAbnahmemenge", "minimale_abnahmemenge"),
    ("netzebeneLieferung", "netzebene_lieferung"),
    ("netzebeneMessung", "netzebene_messung"),
    ("netzlokationsId", "netzlokations_id"),
    ("obisKennzahl", "obis_kennzahl"),
    ("originalRechnungsnummer", "original_rechnungsnummer"),
    ("positionsMenge", "positions_menge"),
    ("preisBezugseinheit", "preis_bezugseinheit"),
    ("preisWaehrungseinheit", "preis_waehrungseinheit"),
    (
        "prognoseArbeitLieferzeitraum",
        "prognose_arbeit_lieferzeitraum",
    ),
    ("prognoseJahresarbeit", "prognose_jahresarbeit"),
    ("prognoseLeistung", "prognose_leistung"),
    ("rabattNetto", "rabatt_netto"),
    ("radiusInKm", "radius_in_km"),
    ("regelzoneEic", "regelzone_eic"),
    ("relativePreispositionen", "relative_preispositionen"),
    ("sepaReferenz", "sepa_referenz"),
    ("staffelgrenzeBis", "staffelgrenze_bis"),
    ("staffelgrenzeVon", "staffelgrenze_von"),
    ("steuerbareRessourceId", "steuerbare_ressource_id"),
    ("steuerbareRessourcen", "steuerbare_ressourcen"),
    (
        "steuerkanalLeistungsbeschreibung",
        "steuerkanal_leistungsbeschreibung",
    ),
    ("summeKosten", "summe_kosten"),
    ("summeKostenblock", "summe_kostenblock"),
    ("tarifAufAbschlaege", "tarif_auf_abschlaege"),
    ("technischeRessourceId", "technische_ressource_id"),
    ("technischeRessourceNutzung", "technische_ressource_nutzung"),
    (
        "technischeRessourceVerbrauchsart",
        "technische_ressource_verbrauchsart",
    ),
    ("technischeRessourcen", "technische_ressourcen"),
    ("temperaturArbeit", "temperatur_arbeit"),
    ("umsatzsteuerId", "umsatzsteuer_id"),
    ("unterzeichnerAngebotsgeber", "unterzeichner_angebotsgeber"),
    (
        "unterzeichnerAngebotsnehmer",
        "unterzeichner_angebotsnehmer",
    ),
    ("vertraglichFixierteMenge", "vertraglich_fixierte_menge"),
    ("vorgelagerteMesslokationId", "vorgelagerte_messlokation_id"),
    ("wahlrechtPrognosegrundlage", "wahlrecht_prognosegrundlage"),
    ("wertBis", "wert_bis"),
    ("wertVon", "wert_von"),
    ("wunschKuendingungsfrist", "wunsch_kuendingungsfrist"),
    ("wunschMaximalmenge", "wunsch_maximalmenge"),
    ("wunschMindestmenge", "wunsch_mindestmenge"),
    ("wunschRechnungslegung", "wunsch_rechnungslegung"),
    ("wunschVertragsform", "wunsch_vertragsform"),
    ("wunschZahlungsziel", "wunsch_zahlungsziel"),
    ("zaehlertypSpezifikation", "zaehlertyp_spezifikation"),
    ("zaehlwerkId", "zaehlwerk_id"),
    (
        "zaehlwerkeDerBeteiligtenMarktrolle",
        "zaehlwerke_der_beteiligten_marktrolle",
    ),
    ("zaehlzeitDefinition", "zaehlzeit_definition"),
    ("zaehlzeitRegister", "zaehlzeit_register"),
    ("zeitIntervallLaenge", "zeit_intervall_laenge"),
    ("zeitbezogeneMenge", "zeitbezogene_menge"),
    ("zeitlicheGueltigkeit", "zeitliche_gueltigkeit"),
    ("zeitraumBelieferbarkeit", "zeitraum_belieferbarkeit"),
    ("zeitraumVermarktung", "zeitraum_vermarktung"),
    (
        "zeitvariablePreispositionen",
        "zeitvariable_preispositionen",
    ),
    ("zuZahlen", "zu_zahlen"),
    ("zugeordneteMarktlokationId", "zugeordnete_marktlokation_id"),
    ("zugeordneteMsbCodenummer", "zugeordnete_msb_codenummer"),
    (
        "zugeordneteSteuerbareRessourceId",
        "zugeordnete_steuerbare_ressource_id",
    ),
    ("zukuenftigerAbschlag", "zukuenftiger_abschlag"),
    ("zusatzAttribute", "zusatz_attribute"),
];
/// Rust snake_case → BO4E wire (camelCase), sorted by snake name.
pub(crate) static SNAKE_TO_WIRE: &[(&str, &str)] = &[
    ("a", "A"),
    ("aktueller_verbrauch", "aktuellerVerbrauch"),
    ("anfrage_subreferenz", "anfrageSubreferenz"),
    ("anteil_prozent", "anteilProzent"),
    ("anwendung_von", "anwendungVon"),
    ("anzahl_ablesungen", "anzahlAblesungen"),
    ("anzahl_abschlaege", "anzahlAbschlaege"),
    ("anzahl_lieferstellen", "anzahlLieferstellen"),
    ("artikel_id", "artikelId"),
    ("auf_abschlagstyp", "aufAbschlagstyp"),
    ("auf_abschlagsziel", "aufAbschlagsziel"),
    ("b", "B"),
    ("bdew_artikelnummer", "bdewArtikelnummer"),
    ("betrag_kostenposition", "betragKostenposition"),
    ("betreut_durch", "betreutDurch"),
    ("bilanzierungsgebiet_eic", "bilanzierungsgebietEic"),
    ("c", "C"),
    ("co2_emission", "co2Emission"),
    ("co_ergaenzung", "coErgaenzung"),
    ("d", "D"),
    ("details_prognosegrundlage", "detailsPrognosegrundlage"),
    (
        "dynamische_preisposition_quelle",
        "dynamischePreispositionQuelle",
    ),
    ("eichung_bis", "eichungBis"),
    ("eigenschaft_msb_lokation", "eigenschaftMsbLokation"),
    ("eigenschaften_gas", "eigenschaftenGas"),
    ("eigenschaften_strom", "eigenschaftenStrom"),
    ("einheits_preispositionen", "einheitsPreispositionen"),
    ("freimenge_blindarbeit", "freimengeBlindarbeit"),
    ("freimenge_leistungsfaktor", "freimengeLeistungsfaktor"),
    ("gebietcode_eic", "gebietcodeEic"),
    ("gemarkung_flur", "gemarkungFlur"),
    ("gesamt_menge", "gesamtMenge"),
    ("glaeubiger_id", "glaeubigerId"),
    (
        "grund_wahlrecht_prognosegrundlage",
        "grundWahlrechtPrognosegrundlage",
    ),
    ("grundzustaendiger_msb_codenr", "grundzustaendigerMsbCodenr"),
    (
        "grundzustaendiger_msbim_codenr",
        "grundzustaendigerMsbimCodenr",
    ),
    ("gruppenartikel_id", "gruppenartikelId"),
    ("hoechstpreis_ht", "hoechstpreisHT"),
    ("hoechstpreis_nt", "hoechstpreisNT"),
    ("id_referenz", "idReferenz"),
    ("individuelle_anrede", "individuelleAnrede"),
    ("inklusive_dienstleistungen", "inklusiveDienstleistungen"),
    ("inklusive_geraete", "inklusiveGeraete"),
    ("ist_abrechnungsrelevant", "istAbrechnungsrelevant"),
    ("ist_bevorzugter_kontaktweg", "istBevorzugterKontaktweg"),
    ("ist_einspeisung", "istEinspeisung"),
    ("ist_fernauslesbar", "istFernauslesbar"),
    ("ist_fernschaltbar", "istFernschaltbar"),
    ("ist_in_oeko_top_ten", "istInOekoTopTen"),
    ("ist_kostenpflichtig", "istKostenpflichtig"),
    ("ist_lastgang_vorhanden", "istLastgangVorhanden"),
    (
        "ist_messpreis_in_grundpreis_enthalten",
        "istMesspreisInGrundpreisEnthalten",
    ),
    (
        "ist_messpreis_zu_beruecksichtigen",
        "istMesspreisZuBeruecksichtigen",
    ),
    ("ist_original", "istOriginal"),
    ("ist_schwachlastfaehig", "istSchwachlastfaehig"),
    ("ist_simuliert", "istSimuliert"),
    ("ist_steuerbefreit", "istSteuerbefreit"),
    ("ist_storno", "istStorno"),
    ("ist_unterbrechbar", "istUnterbrechbar"),
    ("kundengruppe_ka", "kundengruppeKA"),
    ("kw_inklusive", "kwInklusive"),
    ("kw_weitere_mengen", "kwWeitereMengen"),
    (
        "lastvariable_preispositionen",
        "lastvariablePreispositionen",
    ),
    ("letzte_eichung", "letzteEichung"),
    ("link_preisblatt", "linkPreisblatt"),
    ("lokationsbuendel_objektcode", "lokationsbuendelObjektcode"),
    ("marktlokations_id", "marktlokationsId"),
    ("maximale_abnahmemenge", "maximaleAbnahmemenge"),
    ("messlokations_id", "messlokationsId"),
    ("minimale_abnahmemenge", "minimaleAbnahmemenge"),
    ("netzebene_lieferung", "netzebeneLieferung"),
    ("netzebene_messung", "netzebeneMessung"),
    ("netzlokations_id", "netzlokationsId"),
    ("obis_kennzahl", "obisKennzahl"),
    ("original_rechnungsnummer", "originalRechnungsnummer"),
    ("positions_menge", "positionsMenge"),
    ("preis_bezugseinheit", "preisBezugseinheit"),
    ("preis_waehrungseinheit", "preisWaehrungseinheit"),
    (
        "prognose_arbeit_lieferzeitraum",
        "prognoseArbeitLieferzeitraum",
    ),
    ("prognose_jahresarbeit", "prognoseJahresarbeit"),
    ("prognose_leistung", "prognoseLeistung"),
    ("rabatt_netto", "rabattNetto"),
    ("radius_in_km", "radiusInKm"),
    ("regelzone_eic", "regelzoneEic"),
    ("relative_preispositionen", "relativePreispositionen"),
    ("sepa_referenz", "sepaReferenz"),
    ("staffelgrenze_bis", "staffelgrenzeBis"),
    ("staffelgrenze_von", "staffelgrenzeVon"),
    ("steuerbare_ressource_id", "steuerbareRessourceId"),
    ("steuerbare_ressourcen", "steuerbareRessourcen"),
    (
        "steuerkanal_leistungsbeschreibung",
        "steuerkanalLeistungsbeschreibung",
    ),
    ("summe_kosten", "summeKosten"),
    ("summe_kostenblock", "summeKostenblock"),
    ("tarif_auf_abschlaege", "tarifAufAbschlaege"),
    ("technische_ressource_id", "technischeRessourceId"),
    ("technische_ressource_nutzung", "technischeRessourceNutzung"),
    (
        "technische_ressource_verbrauchsart",
        "technischeRessourceVerbrauchsart",
    ),
    ("technische_ressourcen", "technischeRessourcen"),
    ("temperatur_arbeit", "temperaturArbeit"),
    ("umsatzsteuer_id", "umsatzsteuerId"),
    ("unterzeichner_angebotsgeber", "unterzeichnerAngebotsgeber"),
    (
        "unterzeichner_angebotsnehmer",
        "unterzeichnerAngebotsnehmer",
    ),
    ("vertraglich_fixierte_menge", "vertraglichFixierteMenge"),
    ("vorgelagerte_messlokation_id", "vorgelagerteMesslokationId"),
    ("wahlrecht_prognosegrundlage", "wahlrechtPrognosegrundlage"),
    ("wert_bis", "wertBis"),
    ("wert_von", "wertVon"),
    ("wunsch_kuendingungsfrist", "wunschKuendingungsfrist"),
    ("wunsch_maximalmenge", "wunschMaximalmenge"),
    ("wunsch_mindestmenge", "wunschMindestmenge"),
    ("wunsch_rechnungslegung", "wunschRechnungslegung"),
    ("wunsch_vertragsform", "wunschVertragsform"),
    ("wunsch_zahlungsziel", "wunschZahlungsziel"),
    ("zaehlertyp_spezifikation", "zaehlertypSpezifikation"),
    ("zaehlwerk_id", "zaehlwerkId"),
    (
        "zaehlwerke_der_beteiligten_marktrolle",
        "zaehlwerkeDerBeteiligtenMarktrolle",
    ),
    ("zaehlzeit_definition", "zaehlzeitDefinition"),
    ("zaehlzeit_register", "zaehlzeitRegister"),
    ("zeit_intervall_laenge", "zeitIntervallLaenge"),
    ("zeitbezogene_menge", "zeitbezogeneMenge"),
    ("zeitliche_gueltigkeit", "zeitlicheGueltigkeit"),
    ("zeitraum_belieferbarkeit", "zeitraumBelieferbarkeit"),
    ("zeitraum_vermarktung", "zeitraumVermarktung"),
    (
        "zeitvariable_preispositionen",
        "zeitvariablePreispositionen",
    ),
    ("zu_zahlen", "zuZahlen"),
    ("zugeordnete_marktlokation_id", "zugeordneteMarktlokationId"),
    ("zugeordnete_msb_codenummer", "zugeordneteMsbCodenummer"),
    (
        "zugeordnete_steuerbare_ressource_id",
        "zugeordneteSteuerbareRessourceId",
    ),
    ("zukuenftiger_abschlag", "zukuenftigerAbschlag"),
    ("zusatz_attribute", "zusatzAttribute"),
];