bo4e_core/enums/
medium.rs

1//! Physical medium (Medium) enumeration.
2
3use serde::{Deserialize, Serialize};
4
5/// Physical medium type.
6///
7/// Specifies a physical medium.
8///
9/// German: Medium
10#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
11#[non_exhaustive]
12pub enum Medium {
13    /// Electricity (Strom)
14    #[serde(rename = "STROM")]
15    Electricity,
16
17    /// Gas
18    #[serde(rename = "GAS")]
19    Gas,
20
21    /// Water (Wasser)
22    #[serde(rename = "WASSER")]
23    Water,
24
25    /// Steam (Dampf)
26    #[serde(rename = "DAMPF")]
27    Steam,
28}
29
30impl Medium {
31    /// Returns the German name.
32    pub fn german_name(&self) -> &'static str {
33        match self {
34            Self::Electricity => "Strom",
35            Self::Gas => "Gas",
36            Self::Water => "Wasser",
37            Self::Steam => "Dampf",
38        }
39    }
40}
41
42#[cfg(test)]
43mod tests {
44    use super::*;
45
46    #[test]
47    fn test_serialize() {
48        assert_eq!(
49            serde_json::to_string(&Medium::Electricity).unwrap(),
50            r#""STROM""#
51        );
52        assert_eq!(serde_json::to_string(&Medium::Gas).unwrap(), r#""GAS""#);
53    }
54
55    #[test]
56    fn test_roundtrip() {
57        for medium in [
58            Medium::Electricity,
59            Medium::Gas,
60            Medium::Water,
61            Medium::Steam,
62        ] {
63            let json = serde_json::to_string(&medium).unwrap();
64            let parsed: Medium = serde_json::from_str(&json).unwrap();
65            assert_eq!(medium, parsed);
66        }
67    }
68}