bo4e_core/enums/
tariff_time.rs

1//! Tariff time (Tarifzeit) enumeration.
2
3use serde::{Deserialize, Serialize};
4
5/// Tariff time period.
6///
7/// Used to identify different tariff times, for example for pricing or consumption measurement.
8///
9/// German: Tarifzeit
10#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
11#[non_exhaustive]
12pub enum TariffTime {
13    /// Standard tariff time for single-tariff configurations
14    #[serde(rename = "TZ_STANDARD")]
15    Standard,
16
17    /// High tariff time for multi-tariff configurations (HT - Hochtarif)
18    #[serde(rename = "TZ_HT")]
19    HighTariff,
20
21    /// Low tariff time for multi-tariff configurations (NT - Niedrigtarif)
22    #[serde(rename = "TZ_NT")]
23    LowTariff,
24}
25
26impl TariffTime {
27    /// Returns the German name.
28    pub fn german_name(&self) -> &'static str {
29        match self {
30            Self::Standard => "Tarifzeit Standard",
31            Self::HighTariff => "Tarifzeit HT (Hochtarif)",
32            Self::LowTariff => "Tarifzeit NT (Niedrigtarif)",
33        }
34    }
35}
36
37#[cfg(test)]
38mod tests {
39    use super::*;
40
41    #[test]
42    fn test_serialize() {
43        assert_eq!(
44            serde_json::to_string(&TariffTime::Standard).unwrap(),
45            r#""TZ_STANDARD""#
46        );
47        assert_eq!(
48            serde_json::to_string(&TariffTime::HighTariff).unwrap(),
49            r#""TZ_HT""#
50        );
51        assert_eq!(
52            serde_json::to_string(&TariffTime::LowTariff).unwrap(),
53            r#""TZ_NT""#
54        );
55    }
56
57    #[test]
58    fn test_roundtrip() {
59        for time in [
60            TariffTime::Standard,
61            TariffTime::HighTariff,
62            TariffTime::LowTariff,
63        ] {
64            let json = serde_json::to_string(&time).unwrap();
65            let parsed: TariffTime = serde_json::from_str(&json).unwrap();
66            assert_eq!(time, parsed);
67        }
68    }
69}