bo4e_core/enums/
payment_method.rs

1//! Payment method (Zahlungsart) enumeration.
2
3use serde::{Deserialize, Serialize};
4
5/// Method of payment.
6///
7/// German: Zahlungsart
8#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
9#[non_exhaustive]
10pub enum PaymentMethod {
11    /// SEPA direct debit (SEPA Lastschrift)
12    #[serde(rename = "SEPA_LASTSCHRIFT")]
13    SepaDirectDebit,
14
15    /// Bank transfer (Ueberweisung)
16    #[serde(rename = "UEBERWEISUNG")]
17    BankTransfer,
18}
19
20impl PaymentMethod {
21    /// Returns the German name.
22    pub fn german_name(&self) -> &'static str {
23        match self {
24            Self::SepaDirectDebit => "SEPA Lastschrift",
25            Self::BankTransfer => "Ueberweisung",
26        }
27    }
28}
29
30#[cfg(test)]
31mod tests {
32    use super::*;
33
34    #[test]
35    fn test_serialize() {
36        assert_eq!(
37            serde_json::to_string(&PaymentMethod::SepaDirectDebit).unwrap(),
38            r#""SEPA_LASTSCHRIFT""#
39        );
40        assert_eq!(
41            serde_json::to_string(&PaymentMethod::BankTransfer).unwrap(),
42            r#""UEBERWEISUNG""#
43        );
44    }
45
46    #[test]
47    fn test_deserialize() {
48        assert_eq!(
49            serde_json::from_str::<PaymentMethod>(r#""SEPA_LASTSCHRIFT""#).unwrap(),
50            PaymentMethod::SepaDirectDebit
51        );
52        assert_eq!(
53            serde_json::from_str::<PaymentMethod>(r#""UEBERWEISUNG""#).unwrap(),
54            PaymentMethod::BankTransfer
55        );
56    }
57
58    #[test]
59    fn test_roundtrip() {
60        for method in [PaymentMethod::SepaDirectDebit, PaymentMethod::BankTransfer] {
61            let json = serde_json::to_string(&method).unwrap();
62            let parsed: PaymentMethod = serde_json::from_str(&json).unwrap();
63            assert_eq!(method, parsed);
64        }
65    }
66}