bo4e_core/enums/
network_level.rs1use serde::{Deserialize, Serialize};
4
5#[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 = "Netzebene"))]
13#[non_exhaustive]
14pub enum NetworkLevel {
15 #[serde(rename = "NSP")]
18 LowVoltage,
19
20 #[serde(rename = "MSP")]
22 MediumVoltage,
23
24 #[serde(rename = "HSP")]
26 HighVoltage,
27
28 #[serde(rename = "HSS")]
30 ExtraHighVoltage,
31
32 #[serde(rename = "MSP_NSP_UMSP")]
34 MediumLowVoltageTransformation,
35
36 #[serde(rename = "HSP_MSP_UMSP")]
38 HighMediumVoltageTransformation,
39
40 #[serde(rename = "HSS_HSP_UMSP")]
42 ExtraHighHighVoltageTransformation,
43
44 #[serde(rename = "HD")]
47 HighPressure,
48
49 #[serde(rename = "MD")]
51 MediumPressure,
52
53 #[serde(rename = "ND")]
55 LowPressure,
56}
57
58impl NetworkLevel {
59 pub fn german_name(&self) -> &'static str {
61 match self {
62 Self::LowVoltage => "Niederspannung",
63 Self::MediumVoltage => "Mittelspannung",
64 Self::HighVoltage => "Hochspannung",
65 Self::ExtraHighVoltage => "Höchstspannung",
66 Self::MediumLowVoltageTransformation => "MS/NS Umspannung",
67 Self::HighMediumVoltageTransformation => "HS/MS Umspannung",
68 Self::ExtraHighHighVoltageTransformation => "HöS/HS Umspannung",
69 Self::HighPressure => "Hochdruck",
70 Self::MediumPressure => "Mitteldruck",
71 Self::LowPressure => "Niederdruck",
72 }
73 }
74
75 pub fn is_electricity(&self) -> bool {
77 matches!(
78 self,
79 Self::LowVoltage
80 | Self::MediumVoltage
81 | Self::HighVoltage
82 | Self::ExtraHighVoltage
83 | Self::MediumLowVoltageTransformation
84 | Self::HighMediumVoltageTransformation
85 | Self::ExtraHighHighVoltageTransformation
86 )
87 }
88
89 pub fn is_gas(&self) -> bool {
91 matches!(
92 self,
93 Self::HighPressure | Self::MediumPressure | Self::LowPressure
94 )
95 }
96}
97
98#[cfg(test)]
99mod tests {
100 use super::*;
101
102 #[test]
103 fn test_serialize() {
104 assert_eq!(
105 serde_json::to_string(&NetworkLevel::LowVoltage).unwrap(),
106 r#""NSP""#
107 );
108 assert_eq!(
109 serde_json::to_string(&NetworkLevel::HighPressure).unwrap(),
110 r#""HD""#
111 );
112 }
113
114 #[test]
115 fn test_roundtrip() {
116 for level in [
117 NetworkLevel::LowVoltage,
118 NetworkLevel::MediumVoltage,
119 NetworkLevel::HighVoltage,
120 NetworkLevel::ExtraHighVoltage,
121 NetworkLevel::MediumLowVoltageTransformation,
122 NetworkLevel::HighMediumVoltageTransformation,
123 NetworkLevel::ExtraHighHighVoltageTransformation,
124 NetworkLevel::HighPressure,
125 NetworkLevel::MediumPressure,
126 NetworkLevel::LowPressure,
127 ] {
128 let json = serde_json::to_string(&level).unwrap();
129 let parsed: NetworkLevel = serde_json::from_str(&json).unwrap();
130 assert_eq!(level, parsed);
131 }
132 }
133
134 #[test]
135 fn test_is_electricity() {
136 assert!(NetworkLevel::LowVoltage.is_electricity());
137 assert!(NetworkLevel::HighVoltage.is_electricity());
138 assert!(!NetworkLevel::HighPressure.is_electricity());
139 }
140
141 #[test]
142 fn test_is_gas() {
143 assert!(NetworkLevel::HighPressure.is_gas());
144 assert!(NetworkLevel::LowPressure.is_gas());
145 assert!(!NetworkLevel::LowVoltage.is_gas());
146 }
147}