bo4e_core/enums/
contract_status.rs1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
9#[cfg_attr(feature = "json-schema", derive(schemars::JsonSchema))]
10#[cfg_attr(feature = "json-schema", schemars(rename = "Vertragsstatus"))]
11#[non_exhaustive]
12pub enum ContractStatus {
13 #[serde(rename = "IN_ARBEIT")]
15 InProgress,
16
17 #[serde(rename = "UEBERMITTELT")]
19 Transmitted,
20
21 #[serde(rename = "ANGENOMMEN")]
23 Accepted,
24
25 #[serde(rename = "AKTIV")]
27 Active,
28
29 #[serde(rename = "ABGELEHNT")]
31 Rejected,
32
33 #[serde(rename = "WIDERRUFEN")]
35 Revoked,
36
37 #[serde(rename = "STORNIERT")]
39 Cancelled,
40
41 #[serde(rename = "GEKUENDIGT")]
43 Terminated,
44
45 #[serde(rename = "BEENDET")]
47 Ended,
48}
49
50impl ContractStatus {
51 pub fn german_name(&self) -> &'static str {
53 match self {
54 Self::InProgress => "In Arbeit",
55 Self::Transmitted => "Uebermittelt",
56 Self::Accepted => "Angenommen",
57 Self::Active => "Aktiv",
58 Self::Rejected => "Abgelehnt",
59 Self::Revoked => "Widerrufen",
60 Self::Cancelled => "Storniert",
61 Self::Terminated => "Gekuendigt",
62 Self::Ended => "Beendet",
63 }
64 }
65}
66
67#[cfg(test)]
68mod tests {
69 use super::*;
70
71 #[test]
72 fn test_serialize() {
73 assert_eq!(
74 serde_json::to_string(&ContractStatus::Active).unwrap(),
75 r#""AKTIV""#
76 );
77 assert_eq!(
78 serde_json::to_string(&ContractStatus::Terminated).unwrap(),
79 r#""GEKUENDIGT""#
80 );
81 }
82
83 #[test]
84 fn test_deserialize() {
85 assert_eq!(
86 serde_json::from_str::<ContractStatus>(r#""IN_ARBEIT""#).unwrap(),
87 ContractStatus::InProgress
88 );
89 assert_eq!(
90 serde_json::from_str::<ContractStatus>(r#""BEENDET""#).unwrap(),
91 ContractStatus::Ended
92 );
93 }
94
95 #[test]
96 fn test_roundtrip() {
97 for status in [
98 ContractStatus::InProgress,
99 ContractStatus::Transmitted,
100 ContractStatus::Accepted,
101 ContractStatus::Active,
102 ContractStatus::Rejected,
103 ContractStatus::Revoked,
104 ContractStatus::Cancelled,
105 ContractStatus::Terminated,
106 ContractStatus::Ended,
107 ] {
108 let json = serde_json::to_string(&status).unwrap();
109 let parsed: ContractStatus = serde_json::from_str(&json).unwrap();
110 assert_eq!(status, parsed);
111 }
112 }
113}