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 = "Vertragsstatus"))]
#[non_exhaustive]
pub enum ContractStatus {
#[serde(rename = "IN_ARBEIT")]
InProgress,
#[serde(rename = "UEBERMITTELT")]
Transmitted,
#[serde(rename = "ANGENOMMEN")]
Accepted,
#[serde(rename = "AKTIV")]
Active,
#[serde(rename = "ABGELEHNT")]
Rejected,
#[serde(rename = "WIDERRUFEN")]
Revoked,
#[serde(rename = "STORNIERT")]
Cancelled,
#[serde(rename = "GEKUENDIGT")]
Terminated,
#[serde(rename = "BEENDET")]
Ended,
}
impl ContractStatus {
pub fn german_name(&self) -> &'static str {
match self {
Self::InProgress => "In Arbeit",
Self::Transmitted => "Uebermittelt",
Self::Accepted => "Angenommen",
Self::Active => "Aktiv",
Self::Rejected => "Abgelehnt",
Self::Revoked => "Widerrufen",
Self::Cancelled => "Storniert",
Self::Terminated => "Gekuendigt",
Self::Ended => "Beendet",
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_serialize() {
assert_eq!(
serde_json::to_string(&ContractStatus::Active).unwrap(),
r#""AKTIV""#
);
assert_eq!(
serde_json::to_string(&ContractStatus::Terminated).unwrap(),
r#""GEKUENDIGT""#
);
}
#[test]
fn test_deserialize() {
assert_eq!(
serde_json::from_str::<ContractStatus>(r#""IN_ARBEIT""#).unwrap(),
ContractStatus::InProgress
);
assert_eq!(
serde_json::from_str::<ContractStatus>(r#""BEENDET""#).unwrap(),
ContractStatus::Ended
);
}
#[test]
fn test_roundtrip() {
for status in [
ContractStatus::InProgress,
ContractStatus::Transmitted,
ContractStatus::Accepted,
ContractStatus::Active,
ContractStatus::Rejected,
ContractStatus::Revoked,
ContractStatus::Cancelled,
ContractStatus::Terminated,
ContractStatus::Ended,
] {
let json = serde_json::to_string(&status).unwrap();
let parsed: ContractStatus = serde_json::from_str(&json).unwrap();
assert_eq!(status, parsed);
}
}
}