use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[non_exhaustive]
pub enum NetworkLevel {
#[serde(rename = "NSP")]
LowVoltage,
#[serde(rename = "MSP")]
MediumVoltage,
#[serde(rename = "HSP")]
HighVoltage,
#[serde(rename = "HSS")]
ExtraHighVoltage,
#[serde(rename = "MSP_NSP_UMSP")]
MediumLowVoltageTransformation,
#[serde(rename = "HSP_MSP_UMSP")]
HighMediumVoltageTransformation,
#[serde(rename = "HSS_HSP_UMSP")]
ExtraHighHighVoltageTransformation,
#[serde(rename = "HD")]
HighPressure,
#[serde(rename = "MD")]
MediumPressure,
#[serde(rename = "ND")]
LowPressure,
}
impl NetworkLevel {
pub fn german_name(&self) -> &'static str {
match self {
Self::LowVoltage => "Niederspannung",
Self::MediumVoltage => "Mittelspannung",
Self::HighVoltage => "Hochspannung",
Self::ExtraHighVoltage => "Höchstspannung",
Self::MediumLowVoltageTransformation => "MS/NS Umspannung",
Self::HighMediumVoltageTransformation => "HS/MS Umspannung",
Self::ExtraHighHighVoltageTransformation => "HöS/HS Umspannung",
Self::HighPressure => "Hochdruck",
Self::MediumPressure => "Mitteldruck",
Self::LowPressure => "Niederdruck",
}
}
pub fn is_electricity(&self) -> bool {
matches!(
self,
Self::LowVoltage
| Self::MediumVoltage
| Self::HighVoltage
| Self::ExtraHighVoltage
| Self::MediumLowVoltageTransformation
| Self::HighMediumVoltageTransformation
| Self::ExtraHighHighVoltageTransformation
)
}
pub fn is_gas(&self) -> bool {
matches!(
self,
Self::HighPressure | Self::MediumPressure | Self::LowPressure
)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_serialize() {
assert_eq!(
serde_json::to_string(&NetworkLevel::LowVoltage).unwrap(),
r#""NSP""#
);
assert_eq!(
serde_json::to_string(&NetworkLevel::HighPressure).unwrap(),
r#""HD""#
);
}
#[test]
fn test_roundtrip() {
for level in [
NetworkLevel::LowVoltage,
NetworkLevel::MediumVoltage,
NetworkLevel::HighVoltage,
NetworkLevel::ExtraHighVoltage,
NetworkLevel::MediumLowVoltageTransformation,
NetworkLevel::HighMediumVoltageTransformation,
NetworkLevel::ExtraHighHighVoltageTransformation,
NetworkLevel::HighPressure,
NetworkLevel::MediumPressure,
NetworkLevel::LowPressure,
] {
let json = serde_json::to_string(&level).unwrap();
let parsed: NetworkLevel = serde_json::from_str(&json).unwrap();
assert_eq!(level, parsed);
}
}
#[test]
fn test_is_electricity() {
assert!(NetworkLevel::LowVoltage.is_electricity());
assert!(NetworkLevel::HighVoltage.is_electricity());
assert!(!NetworkLevel::HighPressure.is_electricity());
}
#[test]
fn test_is_gas() {
assert!(NetworkLevel::HighPressure.is_gas());
assert!(NetworkLevel::LowPressure.is_gas());
assert!(!NetworkLevel::LowVoltage.is_gas());
}
}