bo4e_core/enums/
measured_value_status.rs

1//! Measured value status (Messwertstatus) enumeration.
2
3use serde::{Deserialize, Serialize};
4
5/// Status of a measured value.
6///
7/// The status of a meter reading.
8///
9/// German: Messwertstatus
10#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
11#[non_exhaustive]
12pub enum MeasuredValueStatus {
13    /// Read/collected value (Abgelesen)
14    #[serde(rename = "ABGELESEN")]
15    Read,
16
17    /// Substitute/replacement value (Ersatzwert)
18    #[serde(rename = "ERSATZWERT")]
19    Substitute,
20
21    /// Information for delivery note (Angabe für Lieferschein)
22    #[serde(rename = "ANGABE_FUER_LIEFERSCHEIN")]
23    DeliveryNoteInfo,
24
25    /// Proposed/suggested value (Vorschlagswert)
26    #[serde(rename = "VORSCHLAGSWERT")]
27    Proposed,
28
29    /// Not usable (Nicht verwendbar)
30    #[serde(rename = "NICHT_VERWENDBAR")]
31    NotUsable,
32
33    /// Forecast/prognosis value (Prognosewert)
34    #[serde(rename = "PROGNOSEWERT")]
35    Forecast,
36
37    /// Preliminary/provisional value (Vorläufiger Wert)
38    #[serde(rename = "VORLAEUFIGERWERT")]
39    Preliminary,
40
41    /// Summed energy amount (Energiemenge summiert)
42    #[serde(rename = "ENERGIEMENGESUMMIERT")]
43    EnergySummed,
44
45    /// Missing (Fehlt)
46    #[serde(rename = "FEHLT")]
47    Missing,
48}
49
50impl MeasuredValueStatus {
51    /// Returns the German name.
52    pub fn german_name(&self) -> &'static str {
53        match self {
54            Self::Read => "Abgelesen",
55            Self::Substitute => "Ersatzwert",
56            Self::DeliveryNoteInfo => "Angabe für Lieferschein",
57            Self::Proposed => "Vorschlagswert",
58            Self::NotUsable => "Nicht verwendbar",
59            Self::Forecast => "Prognosewert",
60            Self::Preliminary => "Vorläufiger Wert",
61            Self::EnergySummed => "Energiemenge summiert",
62            Self::Missing => "Fehlt",
63        }
64    }
65}
66
67#[cfg(test)]
68mod tests {
69    use super::*;
70
71    #[test]
72    fn test_serialize() {
73        assert_eq!(
74            serde_json::to_string(&MeasuredValueStatus::Read).unwrap(),
75            r#""ABGELESEN""#
76        );
77    }
78
79    #[test]
80    fn test_roundtrip() {
81        for status in [
82            MeasuredValueStatus::Read,
83            MeasuredValueStatus::Substitute,
84            MeasuredValueStatus::DeliveryNoteInfo,
85            MeasuredValueStatus::Proposed,
86            MeasuredValueStatus::NotUsable,
87            MeasuredValueStatus::Forecast,
88            MeasuredValueStatus::Preliminary,
89            MeasuredValueStatus::EnergySummed,
90            MeasuredValueStatus::Missing,
91        ] {
92            let json = serde_json::to_string(&status).unwrap();
93            let parsed: MeasuredValueStatus = serde_json::from_str(&json).unwrap();
94            assert_eq!(status, parsed);
95        }
96    }
97}