1#[derive(Clone, Debug)]
2#[cfg_attr(feature = "serialize", derive(serde::Serialize))]
3#[cfg_attr(feature = "deserialize", derive(serde::Deserialize))]
4pub struct PaymentMethodDetailsP24 {
5 pub bank: Option<PaymentMethodDetailsP24Bank>,
8 pub reference: Option<String>,
10 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#[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 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}