use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[non_exhaustive]
pub enum TimeUnit {
#[serde(rename = "SEKUNDE")]
Second,
#[serde(rename = "MINUTE")]
Minute,
#[serde(rename = "STUNDE")]
Hour,
#[serde(rename = "VIERTEL_STUNDE")]
QuarterHour,
#[serde(rename = "TAG")]
Day,
#[serde(rename = "WOCHE")]
Week,
#[serde(rename = "MONAT")]
Month,
#[serde(rename = "QUARTAL")]
Quarter,
#[serde(rename = "HALBJAHR")]
HalfYear,
#[serde(rename = "JAHR")]
Year,
}
impl TimeUnit {
pub fn german_name(&self) -> &'static str {
match self {
Self::Second => "Sekunde",
Self::Minute => "Minute",
Self::Hour => "Stunde",
Self::QuarterHour => "Viertelstunde",
Self::Day => "Tag",
Self::Week => "Woche",
Self::Month => "Monat",
Self::Quarter => "Quartal",
Self::HalfYear => "Halbjahr",
Self::Year => "Jahr",
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_serialize() {
assert_eq!(
serde_json::to_string(&TimeUnit::Hour).unwrap(),
r#""STUNDE""#
);
assert_eq!(serde_json::to_string(&TimeUnit::Year).unwrap(), r#""JAHR""#);
}
#[test]
fn test_roundtrip() {
for unit in [
TimeUnit::Second,
TimeUnit::Minute,
TimeUnit::Hour,
TimeUnit::QuarterHour,
TimeUnit::Day,
TimeUnit::Week,
TimeUnit::Month,
TimeUnit::Quarter,
TimeUnit::HalfYear,
TimeUnit::Year,
] {
let json = serde_json::to_string(&unit).unwrap();
let parsed: TimeUnit = serde_json::from_str(&json).unwrap();
assert_eq!(unit, parsed);
}
}
}