use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[non_exhaustive]
pub enum Division {
#[serde(rename = "STROM")]
Electricity,
#[serde(rename = "GAS")]
Gas,
#[serde(rename = "FERNWAERME")]
DistrictHeating,
#[serde(rename = "NAHWAERME")]
LocalHeating,
#[serde(rename = "WASSER")]
Water,
#[serde(rename = "ABWASSER")]
Wastewater,
#[serde(rename = "STROM_UND_GAS")]
ElectricityAndGas,
}
impl Division {
pub fn german_name(&self) -> &'static str {
match self {
Self::Electricity => "Strom",
Self::Gas => "Gas",
Self::DistrictHeating => "Fernwaerme",
Self::LocalHeating => "Nahwaerme",
Self::Water => "Wasser",
Self::Wastewater => "Abwasser",
Self::ElectricityAndGas => "Strom und Gas",
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_serialize() {
assert_eq!(
serde_json::to_string(&Division::Electricity).unwrap(),
r#""STROM""#
);
assert_eq!(serde_json::to_string(&Division::Gas).unwrap(), r#""GAS""#);
}
#[test]
fn test_deserialize() {
assert_eq!(
serde_json::from_str::<Division>(r#""STROM""#).unwrap(),
Division::Electricity
);
assert_eq!(
serde_json::from_str::<Division>(r#""FERNWAERME""#).unwrap(),
Division::DistrictHeating
);
}
#[test]
fn test_roundtrip() {
for division in [
Division::Electricity,
Division::Gas,
Division::DistrictHeating,
Division::LocalHeating,
Division::Water,
Division::Wastewater,
Division::ElectricityAndGas,
] {
let json = serde_json::to_string(&division).unwrap();
let parsed: Division = serde_json::from_str(&json).unwrap();
assert_eq!(division, parsed);
}
}
}