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 = "Anrede"))]
#[non_exhaustive]
pub enum Salutation {
#[serde(rename = "HERR")]
Mr,
#[serde(rename = "FRAU")]
Ms,
#[serde(rename = "EHELEUTE")]
MarriedCouple,
#[serde(rename = "FIRMA")]
Company,
#[serde(rename = "FAMILIE")]
Family,
#[serde(rename = "ERBENGEMEINSCHAFT")]
HeirsCommunity,
#[serde(rename = "GRUNDSTUECKSGEMEINSCHAFT")]
PropertyCommunity,
}
impl Salutation {
pub fn german_name(&self) -> &'static str {
match self {
Self::Mr => "Herr",
Self::Ms => "Frau",
Self::MarriedCouple => "Eheleute",
Self::Company => "Firma",
Self::Family => "Familie",
Self::HeirsCommunity => "Erbengemeinschaft",
Self::PropertyCommunity => "Grundstuecksgemeinschaft",
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_serialize() {
assert_eq!(serde_json::to_string(&Salutation::Mr).unwrap(), r#""HERR""#);
assert_eq!(serde_json::to_string(&Salutation::Ms).unwrap(), r#""FRAU""#);
}
#[test]
fn test_deserialize() {
assert_eq!(
serde_json::from_str::<Salutation>(r#""HERR""#).unwrap(),
Salutation::Mr
);
assert_eq!(
serde_json::from_str::<Salutation>(r#""FIRMA""#).unwrap(),
Salutation::Company
);
}
#[test]
fn test_roundtrip() {
for salutation in [
Salutation::Mr,
Salutation::Ms,
Salutation::MarriedCouple,
Salutation::Company,
Salutation::Family,
Salutation::HeirsCommunity,
Salutation::PropertyCommunity,
] {
let json = serde_json::to_string(&salutation).unwrap();
let parsed: Salutation = serde_json::from_str(&json).unwrap();
assert_eq!(salutation, parsed);
}
}
}