stripe_shared/
payment_method_details_p24.rs

1#[derive(Clone, Debug)]
2#[cfg_attr(feature = "serialize", derive(serde::Serialize))]
3#[cfg_attr(feature = "deserialize", derive(serde::Deserialize))]
4pub struct PaymentMethodDetailsP24 {
5    /// The customer's bank.
6    /// Can be one of `ing`, `citi_handlowy`, `tmobile_usbugi_bankowe`, `plus_bank`, `etransfer_pocztowy24`, `banki_spbdzielcze`, `bank_nowy_bfg_sa`, `getin_bank`, `velobank`, `blik`, `noble_pay`, `ideabank`, `envelobank`, `santander_przelew24`, `nest_przelew`, `mbank_mtransfer`, `inteligo`, `pbac_z_ipko`, `bnp_paribas`, `credit_agricole`, `toyota_bank`, `bank_pekao_sa`, `volkswagen_bank`, `bank_millennium`, `alior_bank`, or `boz`.
7    pub bank: Option<PaymentMethodDetailsP24Bank>,
8    /// Unique reference for this Przelewy24 payment.
9    pub reference: Option<String>,
10    /// Owner's verified full name. Values are verified or provided by Przelewy24 directly
11    /// (if supported) at the time of authorization or settlement. They cannot be set or mutated.
12    /// Przelewy24 rarely provides this information so the attribute is usually empty.
13    pub verified_name: Option<String>,
14}
15#[doc(hidden)]
16pub struct PaymentMethodDetailsP24Builder {
17    bank: Option<Option<PaymentMethodDetailsP24Bank>>,
18    reference: Option<Option<String>>,
19    verified_name: Option<Option<String>>,
20}
21
22#[allow(
23    unused_variables,
24    irrefutable_let_patterns,
25    clippy::let_unit_value,
26    clippy::match_single_binding,
27    clippy::single_match
28)]
29const _: () = {
30    use miniserde::de::{Map, Visitor};
31    use miniserde::json::Value;
32    use miniserde::{make_place, Deserialize, Result};
33    use stripe_types::miniserde_helpers::FromValueOpt;
34    use stripe_types::{MapBuilder, ObjectDeser};
35
36    make_place!(Place);
37
38    impl Deserialize for PaymentMethodDetailsP24 {
39        fn begin(out: &mut Option<Self>) -> &mut dyn Visitor {
40            Place::new(out)
41        }
42    }
43
44    struct Builder<'a> {
45        out: &'a mut Option<PaymentMethodDetailsP24>,
46        builder: PaymentMethodDetailsP24Builder,
47    }
48
49    impl Visitor for Place<PaymentMethodDetailsP24> {
50        fn map(&mut self) -> Result<Box<dyn Map + '_>> {
51            Ok(Box::new(Builder {
52                out: &mut self.out,
53                builder: PaymentMethodDetailsP24Builder::deser_default(),
54            }))
55        }
56    }
57
58    impl MapBuilder for PaymentMethodDetailsP24Builder {
59        type Out = PaymentMethodDetailsP24;
60        fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
61            Ok(match k {
62                "bank" => Deserialize::begin(&mut self.bank),
63                "reference" => Deserialize::begin(&mut self.reference),
64                "verified_name" => Deserialize::begin(&mut self.verified_name),
65
66                _ => <dyn Visitor>::ignore(),
67            })
68        }
69
70        fn deser_default() -> Self {
71            Self {
72                bank: Deserialize::default(),
73                reference: Deserialize::default(),
74                verified_name: Deserialize::default(),
75            }
76        }
77
78        fn take_out(&mut self) -> Option<Self::Out> {
79            let (Some(bank), Some(reference), Some(verified_name)) =
80                (self.bank.take(), self.reference.take(), self.verified_name.take())
81            else {
82                return None;
83            };
84            Some(Self::Out { bank, reference, verified_name })
85        }
86    }
87
88    impl<'a> Map for Builder<'a> {
89        fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
90            self.builder.key(k)
91        }
92
93        fn finish(&mut self) -> Result<()> {
94            *self.out = self.builder.take_out();
95            Ok(())
96        }
97    }
98
99    impl ObjectDeser for PaymentMethodDetailsP24 {
100        type Builder = PaymentMethodDetailsP24Builder;
101    }
102
103    impl FromValueOpt for PaymentMethodDetailsP24 {
104        fn from_value(v: Value) -> Option<Self> {
105            let Value::Object(obj) = v else {
106                return None;
107            };
108            let mut b = PaymentMethodDetailsP24Builder::deser_default();
109            for (k, v) in obj {
110                match k.as_str() {
111                    "bank" => b.bank = FromValueOpt::from_value(v),
112                    "reference" => b.reference = FromValueOpt::from_value(v),
113                    "verified_name" => b.verified_name = FromValueOpt::from_value(v),
114
115                    _ => {}
116                }
117            }
118            b.take_out()
119        }
120    }
121};
122/// The customer's bank.
123/// Can be one of `ing`, `citi_handlowy`, `tmobile_usbugi_bankowe`, `plus_bank`, `etransfer_pocztowy24`, `banki_spbdzielcze`, `bank_nowy_bfg_sa`, `getin_bank`, `velobank`, `blik`, `noble_pay`, `ideabank`, `envelobank`, `santander_przelew24`, `nest_przelew`, `mbank_mtransfer`, `inteligo`, `pbac_z_ipko`, `bnp_paribas`, `credit_agricole`, `toyota_bank`, `bank_pekao_sa`, `volkswagen_bank`, `bank_millennium`, `alior_bank`, or `boz`.
124#[derive(Clone, Eq, PartialEq)]
125#[non_exhaustive]
126pub enum PaymentMethodDetailsP24Bank {
127    AliorBank,
128    BankMillennium,
129    BankNowyBfgSa,
130    BankPekaoSa,
131    BankiSpbdzielcze,
132    Blik,
133    BnpParibas,
134    Boz,
135    CitiHandlowy,
136    CreditAgricole,
137    Envelobank,
138    EtransferPocztowy24,
139    GetinBank,
140    Ideabank,
141    Ing,
142    Inteligo,
143    MbankMtransfer,
144    NestPrzelew,
145    NoblePay,
146    PbacZIpko,
147    PlusBank,
148    SantanderPrzelew24,
149    TmobileUsbugiBankowe,
150    ToyotaBank,
151    Velobank,
152    VolkswagenBank,
153    /// An unrecognized value from Stripe. Should not be used as a request parameter.
154    Unknown(String),
155}
156impl PaymentMethodDetailsP24Bank {
157    pub fn as_str(&self) -> &str {
158        use PaymentMethodDetailsP24Bank::*;
159        match self {
160            AliorBank => "alior_bank",
161            BankMillennium => "bank_millennium",
162            BankNowyBfgSa => "bank_nowy_bfg_sa",
163            BankPekaoSa => "bank_pekao_sa",
164            BankiSpbdzielcze => "banki_spbdzielcze",
165            Blik => "blik",
166            BnpParibas => "bnp_paribas",
167            Boz => "boz",
168            CitiHandlowy => "citi_handlowy",
169            CreditAgricole => "credit_agricole",
170            Envelobank => "envelobank",
171            EtransferPocztowy24 => "etransfer_pocztowy24",
172            GetinBank => "getin_bank",
173            Ideabank => "ideabank",
174            Ing => "ing",
175            Inteligo => "inteligo",
176            MbankMtransfer => "mbank_mtransfer",
177            NestPrzelew => "nest_przelew",
178            NoblePay => "noble_pay",
179            PbacZIpko => "pbac_z_ipko",
180            PlusBank => "plus_bank",
181            SantanderPrzelew24 => "santander_przelew24",
182            TmobileUsbugiBankowe => "tmobile_usbugi_bankowe",
183            ToyotaBank => "toyota_bank",
184            Velobank => "velobank",
185            VolkswagenBank => "volkswagen_bank",
186            Unknown(v) => v,
187        }
188    }
189}
190
191impl std::str::FromStr for PaymentMethodDetailsP24Bank {
192    type Err = std::convert::Infallible;
193    fn from_str(s: &str) -> Result<Self, Self::Err> {
194        use PaymentMethodDetailsP24Bank::*;
195        match s {
196            "alior_bank" => Ok(AliorBank),
197            "bank_millennium" => Ok(BankMillennium),
198            "bank_nowy_bfg_sa" => Ok(BankNowyBfgSa),
199            "bank_pekao_sa" => Ok(BankPekaoSa),
200            "banki_spbdzielcze" => Ok(BankiSpbdzielcze),
201            "blik" => Ok(Blik),
202            "bnp_paribas" => Ok(BnpParibas),
203            "boz" => Ok(Boz),
204            "citi_handlowy" => Ok(CitiHandlowy),
205            "credit_agricole" => Ok(CreditAgricole),
206            "envelobank" => Ok(Envelobank),
207            "etransfer_pocztowy24" => Ok(EtransferPocztowy24),
208            "getin_bank" => Ok(GetinBank),
209            "ideabank" => Ok(Ideabank),
210            "ing" => Ok(Ing),
211            "inteligo" => Ok(Inteligo),
212            "mbank_mtransfer" => Ok(MbankMtransfer),
213            "nest_przelew" => Ok(NestPrzelew),
214            "noble_pay" => Ok(NoblePay),
215            "pbac_z_ipko" => Ok(PbacZIpko),
216            "plus_bank" => Ok(PlusBank),
217            "santander_przelew24" => Ok(SantanderPrzelew24),
218            "tmobile_usbugi_bankowe" => Ok(TmobileUsbugiBankowe),
219            "toyota_bank" => Ok(ToyotaBank),
220            "velobank" => Ok(Velobank),
221            "volkswagen_bank" => Ok(VolkswagenBank),
222            v => Ok(Unknown(v.to_owned())),
223        }
224    }
225}
226impl std::fmt::Display for PaymentMethodDetailsP24Bank {
227    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
228        f.write_str(self.as_str())
229    }
230}
231
232impl std::fmt::Debug for PaymentMethodDetailsP24Bank {
233    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
234        f.write_str(self.as_str())
235    }
236}
237#[cfg(feature = "serialize")]
238impl serde::Serialize for PaymentMethodDetailsP24Bank {
239    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
240    where
241        S: serde::Serializer,
242    {
243        serializer.serialize_str(self.as_str())
244    }
245}
246impl miniserde::Deserialize for PaymentMethodDetailsP24Bank {
247    fn begin(out: &mut Option<Self>) -> &mut dyn miniserde::de::Visitor {
248        crate::Place::new(out)
249    }
250}
251
252impl miniserde::de::Visitor for crate::Place<PaymentMethodDetailsP24Bank> {
253    fn string(&mut self, s: &str) -> miniserde::Result<()> {
254        use std::str::FromStr;
255        self.out = Some(PaymentMethodDetailsP24Bank::from_str(s).unwrap());
256        Ok(())
257    }
258}
259
260stripe_types::impl_from_val_with_from_str!(PaymentMethodDetailsP24Bank);
261#[cfg(feature = "deserialize")]
262impl<'de> serde::Deserialize<'de> for PaymentMethodDetailsP24Bank {
263    fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
264        use std::str::FromStr;
265        let s: std::borrow::Cow<'de, str> = serde::Deserialize::deserialize(deserializer)?;
266        Ok(Self::from_str(&s).unwrap())
267    }
268}