use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[non_exhaustive]
pub enum RoundingMode {
#[serde(rename = "KEINE")]
None,
#[serde(rename = "KAUFMAENNISCH")]
Commercial,
#[serde(rename = "ABRUNDEN")]
Floor,
#[serde(rename = "AUFRUNDEN")]
Ceiling,
}
impl RoundingMode {
pub fn german_name(&self) -> &'static str {
match self {
Self::None => "Keine Rundung",
Self::Commercial => "Kaufmännische Rundung",
Self::Floor => "Abrunden",
Self::Ceiling => "Aufrunden",
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_serialize() {
assert_eq!(
serde_json::to_string(&RoundingMode::Commercial).unwrap(),
r#""KAUFMAENNISCH""#
);
}
#[test]
fn test_roundtrip() {
for mode in [
RoundingMode::None,
RoundingMode::Commercial,
RoundingMode::Floor,
RoundingMode::Ceiling,
] {
let json = serde_json::to_string(&mode).unwrap();
let parsed: RoundingMode = serde_json::from_str(&json).unwrap();
assert_eq!(mode, parsed);
}
}
}