Skip to main content

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