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 = "Mengeneinheit"))]
#[non_exhaustive]
pub enum Unit {
#[serde(rename = "W")]
Watt,
#[serde(rename = "KW")]
Kilowatt,
#[serde(rename = "MW")]
Megawatt,
#[serde(rename = "WH")]
WattHour,
#[serde(rename = "KWH")]
KilowattHour,
#[serde(rename = "MWH")]
MegawattHour,
#[serde(rename = "VAR")]
VoltAmpereReactive,
#[serde(rename = "KVAR")]
KilovoltAmpereReactive,
#[serde(rename = "VARH")]
VoltAmpereReactiveHour,
#[serde(rename = "KVARH")]
KilovoltAmpereReactiveHour,
#[serde(rename = "KUBIKMETER")]
CubicMeter,
#[serde(rename = "STUECK")]
Piece,
#[serde(rename = "SEKUNDE")]
Second,
#[serde(rename = "MINUTE")]
Minute,
#[serde(rename = "STUNDE")]
Hour,
#[serde(rename = "VIERTEL_STUNDE")]
QuarterHour,
#[serde(rename = "TAG")]
Day,
#[serde(rename = "WOCHE")]
Week,
#[serde(rename = "MONAT")]
Month,
#[serde(rename = "QUARTAL")]
Quarter,
#[serde(rename = "HALBJAHR")]
HalfYear,
#[serde(rename = "JAHR")]
Year,
#[serde(rename = "PROZENT")]
Percent,
#[serde(rename = "KWHK")]
KilowattHourPerKelvin,
}
impl Unit {
pub fn german_name(&self) -> &'static str {
match self {
Self::Watt => "Watt",
Self::Kilowatt => "Kilowatt",
Self::Megawatt => "Megawatt",
Self::WattHour => "Wattstunde",
Self::KilowattHour => "Kilowattstunde",
Self::MegawattHour => "Megawattstunde",
Self::VoltAmpereReactive => "Var",
Self::KilovoltAmpereReactive => "Kilovar",
Self::VoltAmpereReactiveHour => "Varstunde",
Self::KilovoltAmpereReactiveHour => "Kilovarstunde",
Self::CubicMeter => "Kubikmeter",
Self::Piece => "Stück",
Self::Second => "Sekunde",
Self::Minute => "Minute",
Self::Hour => "Stunde",
Self::QuarterHour => "Viertelstunde",
Self::Day => "Tag",
Self::Week => "Woche",
Self::Month => "Monat",
Self::Quarter => "Quartal",
Self::HalfYear => "Halbjahr",
Self::Year => "Jahr",
Self::Percent => "Prozent",
Self::KilowattHourPerKelvin => "Kilowattstunde pro Kelvin",
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_serialize() {
assert_eq!(
serde_json::to_string(&Unit::KilowattHour).unwrap(),
r#""KWH""#
);
assert_eq!(
serde_json::to_string(&Unit::CubicMeter).unwrap(),
r#""KUBIKMETER""#
);
}
#[test]
fn test_deserialize() {
assert_eq!(
serde_json::from_str::<Unit>(r#""MWH""#).unwrap(),
Unit::MegawattHour
);
}
#[test]
fn test_roundtrip() {
for unit in [
Unit::Watt,
Unit::Kilowatt,
Unit::Megawatt,
Unit::WattHour,
Unit::KilowattHour,
Unit::MegawattHour,
Unit::VoltAmpereReactive,
Unit::KilovoltAmpereReactive,
Unit::VoltAmpereReactiveHour,
Unit::KilovoltAmpereReactiveHour,
Unit::CubicMeter,
Unit::Piece,
Unit::Second,
Unit::Minute,
Unit::Hour,
Unit::QuarterHour,
Unit::Day,
Unit::Week,
Unit::Month,
Unit::Quarter,
Unit::HalfYear,
Unit::Year,
Unit::Percent,
Unit::KilowattHourPerKelvin,
] {
let json = serde_json::to_string(&unit).unwrap();
let parsed: Unit = serde_json::from_str(&json).unwrap();
assert_eq!(unit, parsed);
}
}
}