bo4e_core/enums/
meter_size.rs

1//! Meter size (Zaehlergroesse) enumeration.
2
3use serde::{Deserialize, Serialize};
4
5/// Size of a gas meter.
6///
7/// Lists possible sizes of gas meters.
8///
9/// German: Zaehlergroesse
10#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
11#[non_exhaustive]
12pub enum MeterSize {
13    /// Gas meter size G2.5
14    #[serde(rename = "G2KOMMA5")]
15    G2_5,
16
17    /// Gas meter size G4
18    #[serde(rename = "G4")]
19    G4,
20
21    /// Gas meter size G6
22    #[serde(rename = "G6")]
23    G6,
24
25    /// Gas meter size G10
26    #[serde(rename = "G10")]
27    G10,
28
29    /// Gas meter size G16
30    #[serde(rename = "G16")]
31    G16,
32
33    /// Gas meter size G25
34    #[serde(rename = "G25")]
35    G25,
36
37    /// Gas meter size G40
38    #[serde(rename = "G40")]
39    G40,
40
41    /// Gas meter size G65
42    #[serde(rename = "G65")]
43    G65,
44
45    /// Gas meter size G100
46    #[serde(rename = "G100")]
47    G100,
48
49    /// Gas meter size G160
50    #[serde(rename = "G160")]
51    G160,
52
53    /// Gas meter size G250
54    #[serde(rename = "G250")]
55    G250,
56
57    /// Gas meter size G400
58    #[serde(rename = "G400")]
59    G400,
60
61    /// Gas meter size G650
62    #[serde(rename = "G650")]
63    G650,
64
65    /// Gas meter size G1000
66    #[serde(rename = "G1000")]
67    G1000,
68
69    /// Gas meter size G1600
70    #[serde(rename = "G1600")]
71    G1600,
72
73    /// Gas meter size G2500
74    #[serde(rename = "G2500")]
75    G2500,
76
77    /// Gas meter size G4000
78    #[serde(rename = "G4000")]
79    G4000,
80
81    /// Gas meter size G6500
82    #[serde(rename = "G6500")]
83    G6500,
84
85    /// Gas meter size G10000
86    #[serde(rename = "G10000")]
87    G10000,
88
89    /// Gas meter size G12500
90    #[serde(rename = "G12500")]
91    G12500,
92
93    /// Gas meter size G16000
94    #[serde(rename = "G16000")]
95    G16000,
96}
97
98impl MeterSize {
99    /// Returns the German name.
100    pub fn german_name(&self) -> &'static str {
101        match self {
102            Self::G2_5 => "G2,5",
103            Self::G4 => "G4",
104            Self::G6 => "G6",
105            Self::G10 => "G10",
106            Self::G16 => "G16",
107            Self::G25 => "G25",
108            Self::G40 => "G40",
109            Self::G65 => "G65",
110            Self::G100 => "G100",
111            Self::G160 => "G160",
112            Self::G250 => "G250",
113            Self::G400 => "G400",
114            Self::G650 => "G650",
115            Self::G1000 => "G1000",
116            Self::G1600 => "G1600",
117            Self::G2500 => "G2500",
118            Self::G4000 => "G4000",
119            Self::G6500 => "G6500",
120            Self::G10000 => "G10000",
121            Self::G12500 => "G12500",
122            Self::G16000 => "G16000",
123        }
124    }
125}
126
127#[cfg(test)]
128mod tests {
129    use super::*;
130
131    #[test]
132    fn test_serialize() {
133        assert_eq!(serde_json::to_string(&MeterSize::G4).unwrap(), r#""G4""#);
134        assert_eq!(
135            serde_json::to_string(&MeterSize::G2_5).unwrap(),
136            r#""G2KOMMA5""#
137        );
138    }
139
140    #[test]
141    fn test_roundtrip() {
142        for size in [
143            MeterSize::G2_5,
144            MeterSize::G4,
145            MeterSize::G6,
146            MeterSize::G10,
147            MeterSize::G16,
148            MeterSize::G25,
149            MeterSize::G40,
150            MeterSize::G65,
151            MeterSize::G100,
152        ] {
153            let json = serde_json::to_string(&size).unwrap();
154            let parsed: MeterSize = serde_json::from_str(&json).unwrap();
155            assert_eq!(size, parsed);
156        }
157    }
158}