Skip to main content

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#[cfg_attr(feature = "json-schema", derive(schemars::JsonSchema))]
10#[cfg_attr(feature = "json-schema", schemars(rename = "Zahlungsweise"))]
11#[non_exhaustive]
12pub enum PaymentMethod {
13    /// SEPA direct debit (SEPA Lastschrift)
14    #[serde(rename = "SEPA_LASTSCHRIFT")]
15    SepaDirectDebit,
16
17    /// Bank transfer (Ueberweisung)
18    #[serde(rename = "UEBERWEISUNG")]
19    BankTransfer,
20}
21
22impl PaymentMethod {
23    /// Returns the German name.
24    pub fn german_name(&self) -> &'static str {
25        match self {
26            Self::SepaDirectDebit => "SEPA Lastschrift",
27            Self::BankTransfer => "Ueberweisung",
28        }
29    }
30}
31
32#[cfg(test)]
33mod tests {
34    use super::*;
35
36    #[test]
37    fn test_serialize() {
38        assert_eq!(
39            serde_json::to_string(&PaymentMethod::SepaDirectDebit).unwrap(),
40            r#""SEPA_LASTSCHRIFT""#
41        );
42        assert_eq!(
43            serde_json::to_string(&PaymentMethod::BankTransfer).unwrap(),
44            r#""UEBERWEISUNG""#
45        );
46    }
47
48    #[test]
49    fn test_deserialize() {
50        assert_eq!(
51            serde_json::from_str::<PaymentMethod>(r#""SEPA_LASTSCHRIFT""#).unwrap(),
52            PaymentMethod::SepaDirectDebit
53        );
54        assert_eq!(
55            serde_json::from_str::<PaymentMethod>(r#""UEBERWEISUNG""#).unwrap(),
56            PaymentMethod::BankTransfer
57        );
58    }
59
60    #[test]
61    fn test_roundtrip() {
62        for method in [PaymentMethod::SepaDirectDebit, PaymentMethod::BankTransfer] {
63            let json = serde_json::to_string(&method).unwrap();
64            let parsed: PaymentMethod = serde_json::from_str(&json).unwrap();
65            assert_eq!(method, parsed);
66        }
67    }
68}