Skip to main content

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