use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[non_exhaustive]
pub enum TariffTime {
#[serde(rename = "TZ_STANDARD")]
Standard,
#[serde(rename = "TZ_HT")]
HighTariff,
#[serde(rename = "TZ_NT")]
LowTariff,
}
impl TariffTime {
pub fn german_name(&self) -> &'static str {
match self {
Self::Standard => "Tarifzeit Standard",
Self::HighTariff => "Tarifzeit HT (Hochtarif)",
Self::LowTariff => "Tarifzeit NT (Niedrigtarif)",
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_serialize() {
assert_eq!(
serde_json::to_string(&TariffTime::Standard).unwrap(),
r#""TZ_STANDARD""#
);
assert_eq!(
serde_json::to_string(&TariffTime::HighTariff).unwrap(),
r#""TZ_HT""#
);
assert_eq!(
serde_json::to_string(&TariffTime::LowTariff).unwrap(),
r#""TZ_NT""#
);
}
#[test]
fn test_roundtrip() {
for time in [
TariffTime::Standard,
TariffTime::HighTariff,
TariffTime::LowTariff,
] {
let json = serde_json::to_string(&time).unwrap();
let parsed: TariffTime = serde_json::from_str(&json).unwrap();
assert_eq!(time, parsed);
}
}
}