use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[cfg_attr(feature = "json-schema", derive(schemars::JsonSchema))]
#[cfg_attr(feature = "json-schema", schemars(rename = "Geraeteklasse"))]
#[non_exhaustive]
pub enum DeviceCategory {
#[serde(rename = "WANDLER")]
Transformer,
#[serde(rename = "KOMMUNIKATIONSEINRICHTUNG")]
CommunicationEquipment,
#[serde(rename = "TECHNISCHE_STEUEREINRICHTUNG")]
TechnicalControlEquipment,
#[serde(rename = "MENGENUMWERTER")]
VolumeConverter,
#[serde(rename = "SMARTMETER_GATEWAY")]
SmartMeterGateway,
#[serde(rename = "STEUERBOX")]
ControlBox,
#[serde(rename = "ZAEHLEINRICHTUNG")]
MeteringDevice,
}
impl DeviceCategory {
pub fn german_name(&self) -> &'static str {
match self {
Self::Transformer => "Wandler",
Self::CommunicationEquipment => "Kommunikationseinrichtung",
Self::TechnicalControlEquipment => "Technische Steuereinrichtung",
Self::VolumeConverter => "Mengenumwerter",
Self::SmartMeterGateway => "Smartmeter-Gateway",
Self::ControlBox => "Steuerbox",
Self::MeteringDevice => "Zähleinrichtung",
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_serialize() {
assert_eq!(
serde_json::to_string(&DeviceCategory::SmartMeterGateway).unwrap(),
r#""SMARTMETER_GATEWAY""#
);
}
#[test]
fn test_roundtrip() {
for cat in [
DeviceCategory::Transformer,
DeviceCategory::CommunicationEquipment,
DeviceCategory::TechnicalControlEquipment,
DeviceCategory::VolumeConverter,
DeviceCategory::SmartMeterGateway,
DeviceCategory::ControlBox,
DeviceCategory::MeteringDevice,
] {
let json = serde_json::to_string(&cat).unwrap();
let parsed: DeviceCategory = serde_json::from_str(&json).unwrap();
assert_eq!(cat, parsed);
}
}
}