1#[derive(Clone, Debug)]
2#[cfg_attr(feature = "serialize", derive(serde::Serialize))]
3#[cfg_attr(feature = "deserialize", derive(serde::Deserialize))]
4pub struct PaymentMethodDetailsIdeal {
5 pub bank: Option<PaymentMethodDetailsIdealBank>,
8 pub bic: Option<PaymentMethodDetailsIdealBic>,
10 pub generated_sepa_debit: Option<stripe_types::Expandable<stripe_shared::PaymentMethod>>,
12 pub generated_sepa_debit_mandate: Option<stripe_types::Expandable<stripe_shared::Mandate>>,
14 pub iban_last4: Option<String>,
16 pub transaction_id: Option<String>,
18 pub verified_name: Option<String>,
21}
22#[doc(hidden)]
23pub struct PaymentMethodDetailsIdealBuilder {
24 bank: Option<Option<PaymentMethodDetailsIdealBank>>,
25 bic: Option<Option<PaymentMethodDetailsIdealBic>>,
26 generated_sepa_debit: Option<Option<stripe_types::Expandable<stripe_shared::PaymentMethod>>>,
27 generated_sepa_debit_mandate: Option<Option<stripe_types::Expandable<stripe_shared::Mandate>>>,
28 iban_last4: Option<Option<String>>,
29 transaction_id: Option<Option<String>>,
30 verified_name: Option<Option<String>>,
31}
32
33#[allow(
34 unused_variables,
35 irrefutable_let_patterns,
36 clippy::let_unit_value,
37 clippy::match_single_binding,
38 clippy::single_match
39)]
40const _: () = {
41 use miniserde::de::{Map, Visitor};
42 use miniserde::json::Value;
43 use miniserde::{Deserialize, Result, make_place};
44 use stripe_types::miniserde_helpers::FromValueOpt;
45 use stripe_types::{MapBuilder, ObjectDeser};
46
47 make_place!(Place);
48
49 impl Deserialize for PaymentMethodDetailsIdeal {
50 fn begin(out: &mut Option<Self>) -> &mut dyn Visitor {
51 Place::new(out)
52 }
53 }
54
55 struct Builder<'a> {
56 out: &'a mut Option<PaymentMethodDetailsIdeal>,
57 builder: PaymentMethodDetailsIdealBuilder,
58 }
59
60 impl Visitor for Place<PaymentMethodDetailsIdeal> {
61 fn map(&mut self) -> Result<Box<dyn Map + '_>> {
62 Ok(Box::new(Builder {
63 out: &mut self.out,
64 builder: PaymentMethodDetailsIdealBuilder::deser_default(),
65 }))
66 }
67 }
68
69 impl MapBuilder for PaymentMethodDetailsIdealBuilder {
70 type Out = PaymentMethodDetailsIdeal;
71 fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
72 Ok(match k {
73 "bank" => Deserialize::begin(&mut self.bank),
74 "bic" => Deserialize::begin(&mut self.bic),
75 "generated_sepa_debit" => Deserialize::begin(&mut self.generated_sepa_debit),
76 "generated_sepa_debit_mandate" => {
77 Deserialize::begin(&mut self.generated_sepa_debit_mandate)
78 }
79 "iban_last4" => Deserialize::begin(&mut self.iban_last4),
80 "transaction_id" => Deserialize::begin(&mut self.transaction_id),
81 "verified_name" => Deserialize::begin(&mut self.verified_name),
82 _ => <dyn Visitor>::ignore(),
83 })
84 }
85
86 fn deser_default() -> Self {
87 Self {
88 bank: Deserialize::default(),
89 bic: Deserialize::default(),
90 generated_sepa_debit: Deserialize::default(),
91 generated_sepa_debit_mandate: Deserialize::default(),
92 iban_last4: Deserialize::default(),
93 transaction_id: Deserialize::default(),
94 verified_name: Deserialize::default(),
95 }
96 }
97
98 fn take_out(&mut self) -> Option<Self::Out> {
99 let (
100 Some(bank),
101 Some(bic),
102 Some(generated_sepa_debit),
103 Some(generated_sepa_debit_mandate),
104 Some(iban_last4),
105 Some(transaction_id),
106 Some(verified_name),
107 ) = (
108 self.bank.take(),
109 self.bic.take(),
110 self.generated_sepa_debit.take(),
111 self.generated_sepa_debit_mandate.take(),
112 self.iban_last4.take(),
113 self.transaction_id.take(),
114 self.verified_name.take(),
115 )
116 else {
117 return None;
118 };
119 Some(Self::Out {
120 bank,
121 bic,
122 generated_sepa_debit,
123 generated_sepa_debit_mandate,
124 iban_last4,
125 transaction_id,
126 verified_name,
127 })
128 }
129 }
130
131 impl Map for Builder<'_> {
132 fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
133 self.builder.key(k)
134 }
135
136 fn finish(&mut self) -> Result<()> {
137 *self.out = self.builder.take_out();
138 Ok(())
139 }
140 }
141
142 impl ObjectDeser for PaymentMethodDetailsIdeal {
143 type Builder = PaymentMethodDetailsIdealBuilder;
144 }
145
146 impl FromValueOpt for PaymentMethodDetailsIdeal {
147 fn from_value(v: Value) -> Option<Self> {
148 let Value::Object(obj) = v else {
149 return None;
150 };
151 let mut b = PaymentMethodDetailsIdealBuilder::deser_default();
152 for (k, v) in obj {
153 match k.as_str() {
154 "bank" => b.bank = FromValueOpt::from_value(v),
155 "bic" => b.bic = FromValueOpt::from_value(v),
156 "generated_sepa_debit" => b.generated_sepa_debit = FromValueOpt::from_value(v),
157 "generated_sepa_debit_mandate" => {
158 b.generated_sepa_debit_mandate = FromValueOpt::from_value(v)
159 }
160 "iban_last4" => b.iban_last4 = FromValueOpt::from_value(v),
161 "transaction_id" => b.transaction_id = FromValueOpt::from_value(v),
162 "verified_name" => b.verified_name = FromValueOpt::from_value(v),
163 _ => {}
164 }
165 }
166 b.take_out()
167 }
168 }
169};
170#[derive(Clone, Eq, PartialEq)]
173#[non_exhaustive]
174pub enum PaymentMethodDetailsIdealBank {
175 AbnAmro,
176 AsnBank,
177 Bunq,
178 Buut,
179 Finom,
180 Handelsbanken,
181 Ing,
182 Knab,
183 Moneyou,
184 N26,
185 Nn,
186 Rabobank,
187 Regiobank,
188 Revolut,
189 SnsBank,
190 TriodosBank,
191 VanLanschot,
192 Yoursafe,
193 Unknown(String),
195}
196impl PaymentMethodDetailsIdealBank {
197 pub fn as_str(&self) -> &str {
198 use PaymentMethodDetailsIdealBank::*;
199 match self {
200 AbnAmro => "abn_amro",
201 AsnBank => "asn_bank",
202 Bunq => "bunq",
203 Buut => "buut",
204 Finom => "finom",
205 Handelsbanken => "handelsbanken",
206 Ing => "ing",
207 Knab => "knab",
208 Moneyou => "moneyou",
209 N26 => "n26",
210 Nn => "nn",
211 Rabobank => "rabobank",
212 Regiobank => "regiobank",
213 Revolut => "revolut",
214 SnsBank => "sns_bank",
215 TriodosBank => "triodos_bank",
216 VanLanschot => "van_lanschot",
217 Yoursafe => "yoursafe",
218 Unknown(v) => v,
219 }
220 }
221}
222
223impl std::str::FromStr for PaymentMethodDetailsIdealBank {
224 type Err = std::convert::Infallible;
225 fn from_str(s: &str) -> Result<Self, Self::Err> {
226 use PaymentMethodDetailsIdealBank::*;
227 match s {
228 "abn_amro" => Ok(AbnAmro),
229 "asn_bank" => Ok(AsnBank),
230 "bunq" => Ok(Bunq),
231 "buut" => Ok(Buut),
232 "finom" => Ok(Finom),
233 "handelsbanken" => Ok(Handelsbanken),
234 "ing" => Ok(Ing),
235 "knab" => Ok(Knab),
236 "moneyou" => Ok(Moneyou),
237 "n26" => Ok(N26),
238 "nn" => Ok(Nn),
239 "rabobank" => Ok(Rabobank),
240 "regiobank" => Ok(Regiobank),
241 "revolut" => Ok(Revolut),
242 "sns_bank" => Ok(SnsBank),
243 "triodos_bank" => Ok(TriodosBank),
244 "van_lanschot" => Ok(VanLanschot),
245 "yoursafe" => Ok(Yoursafe),
246 v => Ok(Unknown(v.to_owned())),
247 }
248 }
249}
250impl std::fmt::Display for PaymentMethodDetailsIdealBank {
251 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
252 f.write_str(self.as_str())
253 }
254}
255
256impl std::fmt::Debug for PaymentMethodDetailsIdealBank {
257 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
258 f.write_str(self.as_str())
259 }
260}
261#[cfg(feature = "serialize")]
262impl serde::Serialize for PaymentMethodDetailsIdealBank {
263 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
264 where
265 S: serde::Serializer,
266 {
267 serializer.serialize_str(self.as_str())
268 }
269}
270impl miniserde::Deserialize for PaymentMethodDetailsIdealBank {
271 fn begin(out: &mut Option<Self>) -> &mut dyn miniserde::de::Visitor {
272 crate::Place::new(out)
273 }
274}
275
276impl miniserde::de::Visitor for crate::Place<PaymentMethodDetailsIdealBank> {
277 fn string(&mut self, s: &str) -> miniserde::Result<()> {
278 use std::str::FromStr;
279 self.out = Some(PaymentMethodDetailsIdealBank::from_str(s).unwrap());
280 Ok(())
281 }
282}
283
284stripe_types::impl_from_val_with_from_str!(PaymentMethodDetailsIdealBank);
285#[cfg(feature = "deserialize")]
286impl<'de> serde::Deserialize<'de> for PaymentMethodDetailsIdealBank {
287 fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
288 use std::str::FromStr;
289 let s: std::borrow::Cow<'de, str> = serde::Deserialize::deserialize(deserializer)?;
290 Ok(Self::from_str(&s).unwrap())
291 }
292}
293#[derive(Clone, Eq, PartialEq)]
295#[non_exhaustive]
296pub enum PaymentMethodDetailsIdealBic {
297 Abnanl2a,
298 Asnbnl21,
299 Bitsnl2a,
300 Bunqnl2a,
301 Buutnl2a,
302 Fnomnl22,
303 Fvlbnl22,
304 Handnl2a,
305 Ingbnl2a,
306 Knabnl2h,
307 Moyonl21,
308 Nnbanl2g,
309 Ntsbdeb1,
310 Rabonl2u,
311 Rbrbnl21,
312 Revoie23,
313 Revolt21,
314 Snsbnl2a,
315 Trionl2u,
316 Unknown(String),
318}
319impl PaymentMethodDetailsIdealBic {
320 pub fn as_str(&self) -> &str {
321 use PaymentMethodDetailsIdealBic::*;
322 match self {
323 Abnanl2a => "ABNANL2A",
324 Asnbnl21 => "ASNBNL21",
325 Bitsnl2a => "BITSNL2A",
326 Bunqnl2a => "BUNQNL2A",
327 Buutnl2a => "BUUTNL2A",
328 Fnomnl22 => "FNOMNL22",
329 Fvlbnl22 => "FVLBNL22",
330 Handnl2a => "HANDNL2A",
331 Ingbnl2a => "INGBNL2A",
332 Knabnl2h => "KNABNL2H",
333 Moyonl21 => "MOYONL21",
334 Nnbanl2g => "NNBANL2G",
335 Ntsbdeb1 => "NTSBDEB1",
336 Rabonl2u => "RABONL2U",
337 Rbrbnl21 => "RBRBNL21",
338 Revoie23 => "REVOIE23",
339 Revolt21 => "REVOLT21",
340 Snsbnl2a => "SNSBNL2A",
341 Trionl2u => "TRIONL2U",
342 Unknown(v) => v,
343 }
344 }
345}
346
347impl std::str::FromStr for PaymentMethodDetailsIdealBic {
348 type Err = std::convert::Infallible;
349 fn from_str(s: &str) -> Result<Self, Self::Err> {
350 use PaymentMethodDetailsIdealBic::*;
351 match s {
352 "ABNANL2A" => Ok(Abnanl2a),
353 "ASNBNL21" => Ok(Asnbnl21),
354 "BITSNL2A" => Ok(Bitsnl2a),
355 "BUNQNL2A" => Ok(Bunqnl2a),
356 "BUUTNL2A" => Ok(Buutnl2a),
357 "FNOMNL22" => Ok(Fnomnl22),
358 "FVLBNL22" => Ok(Fvlbnl22),
359 "HANDNL2A" => Ok(Handnl2a),
360 "INGBNL2A" => Ok(Ingbnl2a),
361 "KNABNL2H" => Ok(Knabnl2h),
362 "MOYONL21" => Ok(Moyonl21),
363 "NNBANL2G" => Ok(Nnbanl2g),
364 "NTSBDEB1" => Ok(Ntsbdeb1),
365 "RABONL2U" => Ok(Rabonl2u),
366 "RBRBNL21" => Ok(Rbrbnl21),
367 "REVOIE23" => Ok(Revoie23),
368 "REVOLT21" => Ok(Revolt21),
369 "SNSBNL2A" => Ok(Snsbnl2a),
370 "TRIONL2U" => Ok(Trionl2u),
371 v => Ok(Unknown(v.to_owned())),
372 }
373 }
374}
375impl std::fmt::Display for PaymentMethodDetailsIdealBic {
376 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
377 f.write_str(self.as_str())
378 }
379}
380
381impl std::fmt::Debug for PaymentMethodDetailsIdealBic {
382 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
383 f.write_str(self.as_str())
384 }
385}
386#[cfg(feature = "serialize")]
387impl serde::Serialize for PaymentMethodDetailsIdealBic {
388 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
389 where
390 S: serde::Serializer,
391 {
392 serializer.serialize_str(self.as_str())
393 }
394}
395impl miniserde::Deserialize for PaymentMethodDetailsIdealBic {
396 fn begin(out: &mut Option<Self>) -> &mut dyn miniserde::de::Visitor {
397 crate::Place::new(out)
398 }
399}
400
401impl miniserde::de::Visitor for crate::Place<PaymentMethodDetailsIdealBic> {
402 fn string(&mut self, s: &str) -> miniserde::Result<()> {
403 use std::str::FromStr;
404 self.out = Some(PaymentMethodDetailsIdealBic::from_str(s).unwrap());
405 Ok(())
406 }
407}
408
409stripe_types::impl_from_val_with_from_str!(PaymentMethodDetailsIdealBic);
410#[cfg(feature = "deserialize")]
411impl<'de> serde::Deserialize<'de> for PaymentMethodDetailsIdealBic {
412 fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
413 use std::str::FromStr;
414 let s: std::borrow::Cow<'de, str> = serde::Deserialize::deserialize(deserializer)?;
415 Ok(Self::from_str(&s).unwrap())
416 }
417}