bo4e_core/enums/
offer_status.rs1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
9#[non_exhaustive]
10pub enum OfferStatus {
11 #[serde(rename = "KONZEPTION")]
13 Concept,
14
15 #[serde(rename = "UNVERBINDLICH")]
17 NonBinding,
18
19 #[serde(rename = "VERBINDLICH")]
21 Binding,
22
23 #[serde(rename = "BEAUFTRAGT")]
25 Commissioned,
26
27 #[serde(rename = "UNGUELTIG")]
29 Invalid,
30
31 #[serde(rename = "ABGELEHNT")]
33 Rejected,
34
35 #[serde(rename = "NACHGEFASST")]
37 FollowedUp,
38
39 #[serde(rename = "AUSSTEHEND")]
41 Pending,
42
43 #[serde(rename = "ERLEDIGT")]
45 Completed,
46}
47
48impl OfferStatus {
49 pub fn german_name(&self) -> &'static str {
51 match self {
52 Self::Concept => "Konzeption",
53 Self::NonBinding => "Unverbindlich",
54 Self::Binding => "Verbindlich",
55 Self::Commissioned => "Beauftragt",
56 Self::Invalid => "Ungueltig",
57 Self::Rejected => "Abgelehnt",
58 Self::FollowedUp => "Nachgefasst",
59 Self::Pending => "Ausstehend",
60 Self::Completed => "Erledigt",
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(&OfferStatus::Concept).unwrap(),
73 r#""KONZEPTION""#
74 );
75 assert_eq!(
76 serde_json::to_string(&OfferStatus::Binding).unwrap(),
77 r#""VERBINDLICH""#
78 );
79 }
80
81 #[test]
82 fn test_deserialize() {
83 assert_eq!(
84 serde_json::from_str::<OfferStatus>(r#""KONZEPTION""#).unwrap(),
85 OfferStatus::Concept
86 );
87 assert_eq!(
88 serde_json::from_str::<OfferStatus>(r#""ERLEDIGT""#).unwrap(),
89 OfferStatus::Completed
90 );
91 }
92
93 #[test]
94 fn test_roundtrip() {
95 for status in [
96 OfferStatus::Concept,
97 OfferStatus::NonBinding,
98 OfferStatus::Binding,
99 OfferStatus::Commissioned,
100 OfferStatus::Invalid,
101 OfferStatus::Rejected,
102 OfferStatus::FollowedUp,
103 OfferStatus::Pending,
104 OfferStatus::Completed,
105 ] {
106 let json = serde_json::to_string(&status).unwrap();
107 let parsed: OfferStatus = serde_json::from_str(&json).unwrap();
108 assert_eq!(status, parsed);
109 }
110 }
111}