use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[cfg_attr(feature = "json-schema", derive(schemars::JsonSchema))]
#[cfg_attr(feature = "json-schema", schemars(rename = "Kundengruppe"))]
#[non_exhaustive]
pub enum CustomerGroup {
#[serde(rename = "RLM")]
Rlm,
#[serde(rename = "RLM_KOMMUNAL")]
RlmMunicipal,
#[serde(rename = "SLP_KOMMUNAL")]
SlpMunicipal,
#[serde(rename = "SLP_S_G0")]
SlpElectricityG0,
#[serde(rename = "SLP_S_G1")]
SlpElectricityG1,
#[serde(rename = "SLP_S_G2")]
SlpElectricityG2,
#[serde(rename = "SLP_S_G3")]
SlpElectricityG3,
#[serde(rename = "SLP_S_G4")]
SlpElectricityG4,
#[serde(rename = "SLP_S_G5")]
SlpElectricityG5,
#[serde(rename = "SLP_S_G6")]
SlpElectricityG6,
#[serde(rename = "SLP_S_G7")]
SlpElectricityG7,
#[serde(rename = "SLP_S_L0")]
SlpElectricityL0,
#[serde(rename = "SLP_S_L1")]
SlpElectricityL1,
#[serde(rename = "SLP_S_L2")]
SlpElectricityL2,
#[serde(rename = "SLP_S_H0")]
SlpElectricityH0,
#[serde(rename = "SLP_S_SB")]
SlpElectricitySb,
#[serde(rename = "SLP_S_HZ")]
SlpElectricityHz,
#[serde(rename = "SLP_S_WP")]
SlpElectricityWp,
#[serde(rename = "SLP_S_EM")]
SlpElectricityEm,
#[serde(rename = "SLP_S_HZ_GEM")]
SlpElectricityHzGem,
#[serde(rename = "SLP_G_GKO")]
SlpGasGko,
#[serde(rename = "SLP_G_STANDARD")]
SlpGasStandard,
#[serde(rename = "SLP_G_GHA")]
SlpGasGha,
#[serde(rename = "SLP_G_GMK")]
SlpGasGmk,
#[serde(rename = "SLP_G_GBD")]
SlpGasGbd,
#[serde(rename = "SLP_G_GGA")]
SlpGasGga,
#[serde(rename = "SLP_G_GBH")]
SlpGasGbh,
#[serde(rename = "SLP_G_GBA")]
SlpGasGba,
#[serde(rename = "SLP_G_GWA")]
SlpGasGwa,
#[serde(rename = "SLP_G_GGB")]
SlpGasGgb,
#[serde(rename = "SLP_G_GPD")]
SlpGasGpd,
#[serde(rename = "SLP_G_GMF")]
SlpGasGmf,
#[serde(rename = "SLP_G_HEF")]
SlpGasHef,
#[serde(rename = "SLP_G_HMF")]
SlpGasHmf,
#[serde(rename = "SLP_G_HKO")]
SlpGasHko,
}
impl CustomerGroup {
pub fn german_name(&self) -> &'static str {
match self {
Self::Rlm => "RLM",
Self::RlmMunicipal => "RLM Kommunal",
Self::SlpMunicipal => "SLP Kommunal",
Self::SlpElectricityG0 => "Gewerbe allgemein",
Self::SlpElectricityG1 => "Werktags",
Self::SlpElectricityG2 => "Verbrauch in Abendstunden",
Self::SlpElectricityG3 => "Gewerbe durchlaufend",
Self::SlpElectricityG4 => "Laden, Friseur",
Self::SlpElectricityG5 => "Baeckerei mit Backstube",
Self::SlpElectricityG6 => "Wochenendbetrieb",
Self::SlpElectricityG7 => "Mobilfunksendestation",
Self::SlpElectricityL0 => "Landwirtschaft allgemein",
Self::SlpElectricityL1 => "Landwirtschaft mit Milchwirtschaft",
Self::SlpElectricityL2 => "Uebrige Landwirtschaftsbetriebe",
Self::SlpElectricityH0 => "Haushalt allgemein",
Self::SlpElectricitySb => "Strassenbeleuchtung",
Self::SlpElectricityHz => "Nachtspeicherheizung",
Self::SlpElectricityWp => "Waermepumpe",
Self::SlpElectricityEm => "Elektromobilitaet",
Self::SlpElectricityHzGem => "Nachtspeicherheizung gemeinsame Messung",
Self::SlpGasGko => "Gebietskoerperschaften, Kreditinstitute, Versicherungen",
Self::SlpGasStandard => "Standardkundengruppe Gas",
Self::SlpGasGha => "Einzelhandel, Grosshandel",
Self::SlpGasGmk => "Metall, Kfz",
Self::SlpGasGbd => "sonst. betr. Dienstleistungen",
Self::SlpGasGga => "Beherbergung",
Self::SlpGasGbh => "Gaststaetten",
Self::SlpGasGba => "Baeckereien",
Self::SlpGasGwa => "Waeschereien",
Self::SlpGasGgb => "Gartenbau",
Self::SlpGasGpd => "Papier und Druck",
Self::SlpGasGmf => "haushaltsaehnliche Gewerbebetriebe",
Self::SlpGasHef => "Einfamilienhaushalt",
Self::SlpGasHmf => "Mehrfamilienhaushalt",
Self::SlpGasHko => "Kochgas",
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_serialize() {
assert_eq!(
serde_json::to_string(&CustomerGroup::Rlm).unwrap(),
r#""RLM""#
);
assert_eq!(
serde_json::to_string(&CustomerGroup::SlpElectricityH0).unwrap(),
r#""SLP_S_H0""#
);
}
#[test]
fn test_deserialize() {
assert_eq!(
serde_json::from_str::<CustomerGroup>(r#""RLM""#).unwrap(),
CustomerGroup::Rlm
);
assert_eq!(
serde_json::from_str::<CustomerGroup>(r#""SLP_G_HEF""#).unwrap(),
CustomerGroup::SlpGasHef
);
}
#[test]
fn test_roundtrip() {
for group in [
CustomerGroup::Rlm,
CustomerGroup::RlmMunicipal,
CustomerGroup::SlpMunicipal,
CustomerGroup::SlpElectricityG0,
CustomerGroup::SlpElectricityH0,
CustomerGroup::SlpGasStandard,
CustomerGroup::SlpGasHef,
] {
let json = serde_json::to_string(&group).unwrap();
let parsed: CustomerGroup = serde_json::from_str(&json).unwrap();
assert_eq!(group, parsed);
}
}
}