bo4e_core/enums/
offer_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 = "Angebotsstatus"))]
11#[non_exhaustive]
12pub enum OfferStatus {
13 #[serde(rename = "KONZEPTION")]
15 Concept,
16
17 #[serde(rename = "UNVERBINDLICH")]
19 NonBinding,
20
21 #[serde(rename = "VERBINDLICH")]
23 Binding,
24
25 #[serde(rename = "BEAUFTRAGT")]
27 Commissioned,
28
29 #[serde(rename = "UNGUELTIG")]
31 Invalid,
32
33 #[serde(rename = "ABGELEHNT")]
35 Rejected,
36
37 #[serde(rename = "NACHGEFASST")]
39 FollowedUp,
40
41 #[serde(rename = "AUSSTEHEND")]
43 Pending,
44
45 #[serde(rename = "ERLEDIGT")]
47 Completed,
48}
49
50impl OfferStatus {
51 pub fn german_name(&self) -> &'static str {
53 match self {
54 Self::Concept => "Konzeption",
55 Self::NonBinding => "Unverbindlich",
56 Self::Binding => "Verbindlich",
57 Self::Commissioned => "Beauftragt",
58 Self::Invalid => "Ungueltig",
59 Self::Rejected => "Abgelehnt",
60 Self::FollowedUp => "Nachgefasst",
61 Self::Pending => "Ausstehend",
62 Self::Completed => "Erledigt",
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(&OfferStatus::Concept).unwrap(),
75 r#""KONZEPTION""#
76 );
77 assert_eq!(
78 serde_json::to_string(&OfferStatus::Binding).unwrap(),
79 r#""VERBINDLICH""#
80 );
81 }
82
83 #[test]
84 fn test_deserialize() {
85 assert_eq!(
86 serde_json::from_str::<OfferStatus>(r#""KONZEPTION""#).unwrap(),
87 OfferStatus::Concept
88 );
89 assert_eq!(
90 serde_json::from_str::<OfferStatus>(r#""ERLEDIGT""#).unwrap(),
91 OfferStatus::Completed
92 );
93 }
94
95 #[test]
96 fn test_roundtrip() {
97 for status in [
98 OfferStatus::Concept,
99 OfferStatus::NonBinding,
100 OfferStatus::Binding,
101 OfferStatus::Commissioned,
102 OfferStatus::Invalid,
103 OfferStatus::Rejected,
104 OfferStatus::FollowedUp,
105 OfferStatus::Pending,
106 OfferStatus::Completed,
107 ] {
108 let json = serde_json::to_string(&status).unwrap();
109 let parsed: OfferStatus = serde_json::from_str(&json).unwrap();
110 assert_eq!(status, parsed);
111 }
112 }
113}