use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[non_exhaustive]
pub enum Medium {
#[serde(rename = "STROM")]
Electricity,
#[serde(rename = "GAS")]
Gas,
#[serde(rename = "WASSER")]
Water,
#[serde(rename = "DAMPF")]
Steam,
}
impl Medium {
pub fn german_name(&self) -> &'static str {
match self {
Self::Electricity => "Strom",
Self::Gas => "Gas",
Self::Water => "Wasser",
Self::Steam => "Dampf",
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_serialize() {
assert_eq!(
serde_json::to_string(&Medium::Electricity).unwrap(),
r#""STROM""#
);
assert_eq!(serde_json::to_string(&Medium::Gas).unwrap(), r#""GAS""#);
}
#[test]
fn test_roundtrip() {
for medium in [
Medium::Electricity,
Medium::Gas,
Medium::Water,
Medium::Steam,
] {
let json = serde_json::to_string(&medium).unwrap();
let parsed: Medium = serde_json::from_str(&json).unwrap();
assert_eq!(medium, parsed);
}
}
}