Skip to main content

bo4e_core/enums/
tariff_region_criterion.rs

1//! Tariff region criterion (Tarifregionskriterium) enumeration.
2
3use serde::{Deserialize, Serialize};
4
5/// Tariff region criterion.
6///
7/// Criteria to define regional areas for tariffs.
8///
9/// German: Tarifregionskriterium
10#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
11#[cfg_attr(feature = "json-schema", derive(schemars::JsonSchema))]
12#[cfg_attr(feature = "json-schema", schemars(rename = "Tarifregionskriterium"))]
13#[non_exhaustive]
14pub enum TariffRegionCriterion {
15    /// Network number (Netznummer)
16    #[serde(rename = "NETZ_NUMMER")]
17    NetworkNumber,
18
19    /// Postal code (Postleitzahl)
20    #[serde(rename = "POSTLEITZAHL")]
21    PostalCode,
22
23    /// City/Town (Ort)
24    #[serde(rename = "ORT")]
25    City,
26
27    /// Basic supplier number (Grundversorgernummer)
28    #[serde(rename = "GRUNDVERSORGER_NUMMER")]
29    BasicSupplierNumber,
30
31    /// Reference to a Region business object (URL)
32    #[serde(rename = "REGION")]
33    Region,
34}
35
36impl TariffRegionCriterion {
37    /// Returns the German name.
38    pub fn german_name(&self) -> &'static str {
39        match self {
40            Self::NetworkNumber => "Netznummer",
41            Self::PostalCode => "Postleitzahl",
42            Self::City => "Ort",
43            Self::BasicSupplierNumber => "Grundversorgernummer",
44            Self::Region => "Region",
45        }
46    }
47}
48
49#[cfg(test)]
50mod tests {
51    use super::*;
52
53    #[test]
54    fn test_serialize() {
55        assert_eq!(
56            serde_json::to_string(&TariffRegionCriterion::PostalCode).unwrap(),
57            r#""POSTLEITZAHL""#
58        );
59        assert_eq!(
60            serde_json::to_string(&TariffRegionCriterion::City).unwrap(),
61            r#""ORT""#
62        );
63    }
64
65    #[test]
66    fn test_roundtrip() {
67        for criterion in [
68            TariffRegionCriterion::NetworkNumber,
69            TariffRegionCriterion::PostalCode,
70            TariffRegionCriterion::City,
71            TariffRegionCriterion::BasicSupplierNumber,
72            TariffRegionCriterion::Region,
73        ] {
74            let json = serde_json::to_string(&criterion).unwrap();
75            let parsed: TariffRegionCriterion = serde_json::from_str(&json).unwrap();
76            assert_eq!(criterion, parsed);
77        }
78    }
79}