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