bitwarden_api_api/models/
payment_method_type.rs1use serde::{Deserialize, Deserializer, Serialize, Serializer, de::Visitor};
12
13use crate::models;
14#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
16pub enum PaymentMethodType {
17 Card,
18 BankAccount,
19 PayPal,
20 BitPay,
21 Credit,
22 WireTransfer,
23 Check,
24 None,
25
26 __Unknown(i64),
28}
29
30impl PaymentMethodType {
31 pub fn as_i64(&self) -> i64 {
32 match self {
33 Self::Card => 0,
34 Self::BankAccount => 1,
35 Self::PayPal => 2,
36 Self::BitPay => 3,
37 Self::Credit => 4,
38 Self::WireTransfer => 5,
39 Self::Check => 8,
40 Self::None => 255,
41 Self::__Unknown(v) => *v,
42 }
43 }
44
45 pub fn from_i64(value: i64) -> Self {
46 match value {
47 0 => Self::Card,
48 1 => Self::BankAccount,
49 2 => Self::PayPal,
50 3 => Self::BitPay,
51 4 => Self::Credit,
52 5 => Self::WireTransfer,
53 8 => Self::Check,
54 255 => Self::None,
55 v => Self::__Unknown(v),
56 }
57 }
58}
59
60impl serde::Serialize for PaymentMethodType {
61 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
62 serializer.serialize_i64(self.as_i64())
63 }
64}
65
66impl<'de> serde::Deserialize<'de> for PaymentMethodType {
67 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
68 struct PaymentMethodTypeVisitor;
69
70 impl Visitor<'_> for PaymentMethodTypeVisitor {
71 type Value = PaymentMethodType;
72
73 fn expecting(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
74 f.write_str("an integer")
75 }
76
77 fn visit_i64<E: serde::de::Error>(self, v: i64) -> Result<Self::Value, E> {
78 Ok(PaymentMethodType::from_i64(v))
79 }
80
81 fn visit_u64<E: serde::de::Error>(self, v: u64) -> Result<Self::Value, E> {
82 Ok(PaymentMethodType::from_i64(v as i64))
83 }
84 }
85
86 deserializer.deserialize_i64(PaymentMethodTypeVisitor)
87 }
88}
89
90impl std::fmt::Display for PaymentMethodType {
91 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
92 write!(f, "{}", self.as_i64())
93 }
94}
95impl Default for PaymentMethodType {
96 fn default() -> PaymentMethodType {
97 Self::Card
98 }
99}