use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[cfg_attr(feature = "json-schema", derive(schemars::JsonSchema))]
#[cfg_attr(feature = "json-schema", schemars(rename = "Zaehlergroesse"))]
#[non_exhaustive]
pub enum MeterSize {
#[serde(rename = "G2KOMMA5")]
G2_5,
#[serde(rename = "G4")]
G4,
#[serde(rename = "G6")]
G6,
#[serde(rename = "G10")]
G10,
#[serde(rename = "G16")]
G16,
#[serde(rename = "G25")]
G25,
#[serde(rename = "G40")]
G40,
#[serde(rename = "G65")]
G65,
#[serde(rename = "G100")]
G100,
#[serde(rename = "G160")]
G160,
#[serde(rename = "G250")]
G250,
#[serde(rename = "G400")]
G400,
#[serde(rename = "G650")]
G650,
#[serde(rename = "G1000")]
G1000,
#[serde(rename = "G1600")]
G1600,
#[serde(rename = "G2500")]
G2500,
#[serde(rename = "G4000")]
G4000,
#[serde(rename = "G6500")]
G6500,
#[serde(rename = "G10000")]
G10000,
#[serde(rename = "G12500")]
G12500,
#[serde(rename = "G16000")]
G16000,
}
impl MeterSize {
pub fn german_name(&self) -> &'static str {
match self {
Self::G2_5 => "G2,5",
Self::G4 => "G4",
Self::G6 => "G6",
Self::G10 => "G10",
Self::G16 => "G16",
Self::G25 => "G25",
Self::G40 => "G40",
Self::G65 => "G65",
Self::G100 => "G100",
Self::G160 => "G160",
Self::G250 => "G250",
Self::G400 => "G400",
Self::G650 => "G650",
Self::G1000 => "G1000",
Self::G1600 => "G1600",
Self::G2500 => "G2500",
Self::G4000 => "G4000",
Self::G6500 => "G6500",
Self::G10000 => "G10000",
Self::G12500 => "G12500",
Self::G16000 => "G16000",
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_serialize() {
assert_eq!(serde_json::to_string(&MeterSize::G4).unwrap(), r#""G4""#);
assert_eq!(
serde_json::to_string(&MeterSize::G2_5).unwrap(),
r#""G2KOMMA5""#
);
}
#[test]
fn test_roundtrip() {
for size in [
MeterSize::G2_5,
MeterSize::G4,
MeterSize::G6,
MeterSize::G10,
MeterSize::G16,
MeterSize::G25,
MeterSize::G40,
MeterSize::G65,
MeterSize::G100,
] {
let json = serde_json::to_string(&size).unwrap();
let parsed: MeterSize = serde_json::from_str(&json).unwrap();
assert_eq!(size, parsed);
}
}
}