use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[non_exhaustive]
pub enum MeasuredValueStatus {
#[serde(rename = "ABGELESEN")]
Read,
#[serde(rename = "ERSATZWERT")]
Substitute,
#[serde(rename = "ANGABE_FUER_LIEFERSCHEIN")]
DeliveryNoteInfo,
#[serde(rename = "VORSCHLAGSWERT")]
Proposed,
#[serde(rename = "NICHT_VERWENDBAR")]
NotUsable,
#[serde(rename = "PROGNOSEWERT")]
Forecast,
#[serde(rename = "VORLAEUFIGERWERT")]
Preliminary,
#[serde(rename = "ENERGIEMENGESUMMIERT")]
EnergySummed,
#[serde(rename = "FEHLT")]
Missing,
}
impl MeasuredValueStatus {
pub fn german_name(&self) -> &'static str {
match self {
Self::Read => "Abgelesen",
Self::Substitute => "Ersatzwert",
Self::DeliveryNoteInfo => "Angabe für Lieferschein",
Self::Proposed => "Vorschlagswert",
Self::NotUsable => "Nicht verwendbar",
Self::Forecast => "Prognosewert",
Self::Preliminary => "Vorläufiger Wert",
Self::EnergySummed => "Energiemenge summiert",
Self::Missing => "Fehlt",
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_serialize() {
assert_eq!(
serde_json::to_string(&MeasuredValueStatus::Read).unwrap(),
r#""ABGELESEN""#
);
}
#[test]
fn test_roundtrip() {
for status in [
MeasuredValueStatus::Read,
MeasuredValueStatus::Substitute,
MeasuredValueStatus::DeliveryNoteInfo,
MeasuredValueStatus::Proposed,
MeasuredValueStatus::NotUsable,
MeasuredValueStatus::Forecast,
MeasuredValueStatus::Preliminary,
MeasuredValueStatus::EnergySummed,
MeasuredValueStatus::Missing,
] {
let json = serde_json::to_string(&status).unwrap();
let parsed: MeasuredValueStatus = serde_json::from_str(&json).unwrap();
assert_eq!(status, parsed);
}
}
}