1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
9#[non_exhaustive]
10pub enum CustomerGroup {
11 #[serde(rename = "RLM")]
14 Rlm,
15
16 #[serde(rename = "RLM_KOMMUNAL")]
18 RlmMunicipal,
19
20 #[serde(rename = "SLP_KOMMUNAL")]
22 SlpMunicipal,
23
24 #[serde(rename = "SLP_S_G0")]
27 SlpElectricityG0,
28
29 #[serde(rename = "SLP_S_G1")]
31 SlpElectricityG1,
32
33 #[serde(rename = "SLP_S_G2")]
35 SlpElectricityG2,
36
37 #[serde(rename = "SLP_S_G3")]
39 SlpElectricityG3,
40
41 #[serde(rename = "SLP_S_G4")]
43 SlpElectricityG4,
44
45 #[serde(rename = "SLP_S_G5")]
47 SlpElectricityG5,
48
49 #[serde(rename = "SLP_S_G6")]
51 SlpElectricityG6,
52
53 #[serde(rename = "SLP_S_G7")]
55 SlpElectricityG7,
56
57 #[serde(rename = "SLP_S_L0")]
60 SlpElectricityL0,
61
62 #[serde(rename = "SLP_S_L1")]
64 SlpElectricityL1,
65
66 #[serde(rename = "SLP_S_L2")]
68 SlpElectricityL2,
69
70 #[serde(rename = "SLP_S_H0")]
73 SlpElectricityH0,
74
75 #[serde(rename = "SLP_S_SB")]
78 SlpElectricitySb,
79
80 #[serde(rename = "SLP_S_HZ")]
82 SlpElectricityHz,
83
84 #[serde(rename = "SLP_S_WP")]
86 SlpElectricityWp,
87
88 #[serde(rename = "SLP_S_EM")]
90 SlpElectricityEm,
91
92 #[serde(rename = "SLP_S_HZ_GEM")]
94 SlpElectricityHzGem,
95
96 #[serde(rename = "SLP_G_GKO")]
99 SlpGasGko,
100
101 #[serde(rename = "SLP_G_STANDARD")]
103 SlpGasStandard,
104
105 #[serde(rename = "SLP_G_GHA")]
107 SlpGasGha,
108
109 #[serde(rename = "SLP_G_GMK")]
111 SlpGasGmk,
112
113 #[serde(rename = "SLP_G_GBD")]
115 SlpGasGbd,
116
117 #[serde(rename = "SLP_G_GGA")]
119 SlpGasGga,
120
121 #[serde(rename = "SLP_G_GBH")]
123 SlpGasGbh,
124
125 #[serde(rename = "SLP_G_GBA")]
127 SlpGasGba,
128
129 #[serde(rename = "SLP_G_GWA")]
131 SlpGasGwa,
132
133 #[serde(rename = "SLP_G_GGB")]
135 SlpGasGgb,
136
137 #[serde(rename = "SLP_G_GPD")]
139 SlpGasGpd,
140
141 #[serde(rename = "SLP_G_GMF")]
143 SlpGasGmf,
144
145 #[serde(rename = "SLP_G_HEF")]
147 SlpGasHef,
148
149 #[serde(rename = "SLP_G_HMF")]
151 SlpGasHmf,
152
153 #[serde(rename = "SLP_G_HKO")]
155 SlpGasHko,
156}
157
158impl CustomerGroup {
159 pub fn german_name(&self) -> &'static str {
161 match self {
162 Self::Rlm => "RLM",
163 Self::RlmMunicipal => "RLM Kommunal",
164 Self::SlpMunicipal => "SLP Kommunal",
165 Self::SlpElectricityG0 => "Gewerbe allgemein",
166 Self::SlpElectricityG1 => "Werktags",
167 Self::SlpElectricityG2 => "Verbrauch in Abendstunden",
168 Self::SlpElectricityG3 => "Gewerbe durchlaufend",
169 Self::SlpElectricityG4 => "Laden, Friseur",
170 Self::SlpElectricityG5 => "Baeckerei mit Backstube",
171 Self::SlpElectricityG6 => "Wochenendbetrieb",
172 Self::SlpElectricityG7 => "Mobilfunksendestation",
173 Self::SlpElectricityL0 => "Landwirtschaft allgemein",
174 Self::SlpElectricityL1 => "Landwirtschaft mit Milchwirtschaft",
175 Self::SlpElectricityL2 => "Uebrige Landwirtschaftsbetriebe",
176 Self::SlpElectricityH0 => "Haushalt allgemein",
177 Self::SlpElectricitySb => "Strassenbeleuchtung",
178 Self::SlpElectricityHz => "Nachtspeicherheizung",
179 Self::SlpElectricityWp => "Waermepumpe",
180 Self::SlpElectricityEm => "Elektromobilitaet",
181 Self::SlpElectricityHzGem => "Nachtspeicherheizung gemeinsame Messung",
182 Self::SlpGasGko => "Gebietskoerperschaften, Kreditinstitute, Versicherungen",
183 Self::SlpGasStandard => "Standardkundengruppe Gas",
184 Self::SlpGasGha => "Einzelhandel, Grosshandel",
185 Self::SlpGasGmk => "Metall, Kfz",
186 Self::SlpGasGbd => "sonst. betr. Dienstleistungen",
187 Self::SlpGasGga => "Beherbergung",
188 Self::SlpGasGbh => "Gaststaetten",
189 Self::SlpGasGba => "Baeckereien",
190 Self::SlpGasGwa => "Waeschereien",
191 Self::SlpGasGgb => "Gartenbau",
192 Self::SlpGasGpd => "Papier und Druck",
193 Self::SlpGasGmf => "haushaltsaehnliche Gewerbebetriebe",
194 Self::SlpGasHef => "Einfamilienhaushalt",
195 Self::SlpGasHmf => "Mehrfamilienhaushalt",
196 Self::SlpGasHko => "Kochgas",
197 }
198 }
199}
200
201#[cfg(test)]
202mod tests {
203 use super::*;
204
205 #[test]
206 fn test_serialize() {
207 assert_eq!(
208 serde_json::to_string(&CustomerGroup::Rlm).unwrap(),
209 r#""RLM""#
210 );
211 assert_eq!(
212 serde_json::to_string(&CustomerGroup::SlpElectricityH0).unwrap(),
213 r#""SLP_S_H0""#
214 );
215 }
216
217 #[test]
218 fn test_deserialize() {
219 assert_eq!(
220 serde_json::from_str::<CustomerGroup>(r#""RLM""#).unwrap(),
221 CustomerGroup::Rlm
222 );
223 assert_eq!(
224 serde_json::from_str::<CustomerGroup>(r#""SLP_G_HEF""#).unwrap(),
225 CustomerGroup::SlpGasHef
226 );
227 }
228
229 #[test]
230 fn test_roundtrip() {
231 for group in [
232 CustomerGroup::Rlm,
233 CustomerGroup::RlmMunicipal,
234 CustomerGroup::SlpMunicipal,
235 CustomerGroup::SlpElectricityG0,
236 CustomerGroup::SlpElectricityH0,
237 CustomerGroup::SlpGasStandard,
238 CustomerGroup::SlpGasHef,
239 ] {
240 let json = serde_json::to_string(&group).unwrap();
241 let parsed: CustomerGroup = serde_json::from_str(&json).unwrap();
242 assert_eq!(group, parsed);
243 }
244 }
245}