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