use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[non_exhaustive]
pub enum MeasuredQuantity {
#[serde(rename = "STROM")]
Current,
#[serde(rename = "SPANNUNG")]
Voltage,
#[serde(rename = "WIRKLEISTUNG")]
ActivePower,
#[serde(rename = "BLINDLEISTUNG")]
ReactivePower,
#[serde(rename = "DRUCK")]
Pressure,
#[serde(rename = "LASTGANG")]
LoadProfile,
#[serde(rename = "LASTPROFIL")]
StandardLoadProfile,
#[serde(rename = "TEMPERATUR")]
Temperature,
#[serde(rename = "ZZAHL")]
StateNumber,
#[serde(rename = "BRENNWERT")]
CalorificValue,
#[serde(rename = "GRADTZAGSZAHLEN")]
DegreeDays,
#[serde(rename = "VOLUMENSTROM")]
VolumeFlow,
#[serde(rename = "PREISE")]
Prices,
}
impl MeasuredQuantity {
pub fn german_name(&self) -> &'static str {
match self {
Self::Current => "Strom",
Self::Voltage => "Spannung",
Self::ActivePower => "Wirkleistung",
Self::ReactivePower => "Blindleistung",
Self::Pressure => "Druck",
Self::LoadProfile => "Lastgang",
Self::StandardLoadProfile => "Lastprofil",
Self::Temperature => "Temperatur",
Self::StateNumber => "Zustandszahl",
Self::CalorificValue => "Brennwert",
Self::DegreeDays => "Gradtagszahlen",
Self::VolumeFlow => "Volumenstrom",
Self::Prices => "Preise",
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_serialize() {
assert_eq!(
serde_json::to_string(&MeasuredQuantity::Voltage).unwrap(),
r#""SPANNUNG""#
);
}
#[test]
fn test_roundtrip() {
for quantity in [
MeasuredQuantity::Current,
MeasuredQuantity::Voltage,
MeasuredQuantity::ActivePower,
MeasuredQuantity::ReactivePower,
MeasuredQuantity::Pressure,
MeasuredQuantity::LoadProfile,
MeasuredQuantity::StandardLoadProfile,
MeasuredQuantity::Temperature,
MeasuredQuantity::StateNumber,
MeasuredQuantity::CalorificValue,
MeasuredQuantity::DegreeDays,
MeasuredQuantity::VolumeFlow,
MeasuredQuantity::Prices,
] {
let json = serde_json::to_string(&quantity).unwrap();
let parsed: MeasuredQuantity = serde_json::from_str(&json).unwrap();
assert_eq!(quantity, parsed);
}
}
}