Skip to main content

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#[cfg_attr(feature = "json-schema", derive(schemars::JsonSchema))]
12#[cfg_attr(feature = "json-schema", schemars(rename = "Medium"))]
13#[non_exhaustive]
14pub enum Medium {
15    /// Electricity (Strom)
16    #[serde(rename = "STROM")]
17    Electricity,
18
19    /// Gas
20    #[serde(rename = "GAS")]
21    Gas,
22
23    /// Water (Wasser)
24    #[serde(rename = "WASSER")]
25    Water,
26
27    /// Steam (Dampf)
28    #[serde(rename = "DAMPF")]
29    Steam,
30}
31
32impl Medium {
33    /// Returns the German name.
34    pub fn german_name(&self) -> &'static str {
35        match self {
36            Self::Electricity => "Strom",
37            Self::Gas => "Gas",
38            Self::Water => "Wasser",
39            Self::Steam => "Dampf",
40        }
41    }
42}
43
44#[cfg(test)]
45mod tests {
46    use super::*;
47
48    #[test]
49    fn test_serialize() {
50        assert_eq!(
51            serde_json::to_string(&Medium::Electricity).unwrap(),
52            r#""STROM""#
53        );
54        assert_eq!(serde_json::to_string(&Medium::Gas).unwrap(), r#""GAS""#);
55    }
56
57    #[test]
58    fn test_roundtrip() {
59        for medium in [
60            Medium::Electricity,
61            Medium::Gas,
62            Medium::Water,
63            Medium::Steam,
64        ] {
65            let json = serde_json::to_string(&medium).unwrap();
66            let parsed: Medium = serde_json::from_str(&json).unwrap();
67            assert_eq!(medium, parsed);
68        }
69    }
70}