bo4e_core/enums/
invoice_status.rs1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
9#[non_exhaustive]
10pub enum InvoiceStatus {
11 #[serde(rename = "UNGEPRUEFT")]
13 Unchecked,
14
15 #[serde(rename = "GEPRUEFT_OK")]
17 CheckedOk,
18
19 #[serde(rename = "GEPRUEFT_FEHLERHAFT")]
21 CheckedWithErrors,
22
23 #[serde(rename = "GEBUCHT")]
25 Booked,
26
27 #[serde(rename = "BEZAHLT")]
29 Paid,
30}
31
32impl InvoiceStatus {
33 pub fn german_name(&self) -> &'static str {
35 match self {
36 Self::Unchecked => "Ungeprueft",
37 Self::CheckedOk => "Geprueft OK",
38 Self::CheckedWithErrors => "Geprueft fehlerhaft",
39 Self::Booked => "Gebucht",
40 Self::Paid => "Bezahlt",
41 }
42 }
43}
44
45#[cfg(test)]
46mod tests {
47 use super::*;
48
49 #[test]
50 fn test_serialize() {
51 assert_eq!(
52 serde_json::to_string(&InvoiceStatus::Unchecked).unwrap(),
53 r#""UNGEPRUEFT""#
54 );
55 assert_eq!(
56 serde_json::to_string(&InvoiceStatus::Paid).unwrap(),
57 r#""BEZAHLT""#
58 );
59 }
60
61 #[test]
62 fn test_deserialize() {
63 assert_eq!(
64 serde_json::from_str::<InvoiceStatus>(r#""UNGEPRUEFT""#).unwrap(),
65 InvoiceStatus::Unchecked
66 );
67 assert_eq!(
68 serde_json::from_str::<InvoiceStatus>(r#""GEPRUEFT_OK""#).unwrap(),
69 InvoiceStatus::CheckedOk
70 );
71 }
72
73 #[test]
74 fn test_roundtrip() {
75 for status in [
76 InvoiceStatus::Unchecked,
77 InvoiceStatus::CheckedOk,
78 InvoiceStatus::CheckedWithErrors,
79 InvoiceStatus::Booked,
80 InvoiceStatus::Paid,
81 ] {
82 let json = serde_json::to_string(&status).unwrap();
83 let parsed: InvoiceStatus = serde_json::from_str(&json).unwrap();
84 assert_eq!(status, parsed);
85 }
86 }
87}