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 Mollie,
184 Moneyou,
185 N26,
186 Nn,
187 Rabobank,
188 Regiobank,
189 Revolut,
190 SnsBank,
191 TriodosBank,
192 VanLanschot,
193 Yoursafe,
194 Unknown(String),
196}
197impl PaymentMethodDetailsIdealBank {
198 pub fn as_str(&self) -> &str {
199 use PaymentMethodDetailsIdealBank::*;
200 match self {
201 AbnAmro => "abn_amro",
202 AsnBank => "asn_bank",
203 Bunq => "bunq",
204 Buut => "buut",
205 Finom => "finom",
206 Handelsbanken => "handelsbanken",
207 Ing => "ing",
208 Knab => "knab",
209 Mollie => "mollie",
210 Moneyou => "moneyou",
211 N26 => "n26",
212 Nn => "nn",
213 Rabobank => "rabobank",
214 Regiobank => "regiobank",
215 Revolut => "revolut",
216 SnsBank => "sns_bank",
217 TriodosBank => "triodos_bank",
218 VanLanschot => "van_lanschot",
219 Yoursafe => "yoursafe",
220 Unknown(v) => v,
221 }
222 }
223}
224
225impl std::str::FromStr for PaymentMethodDetailsIdealBank {
226 type Err = std::convert::Infallible;
227 fn from_str(s: &str) -> Result<Self, Self::Err> {
228 use PaymentMethodDetailsIdealBank::*;
229 match s {
230 "abn_amro" => Ok(AbnAmro),
231 "asn_bank" => Ok(AsnBank),
232 "bunq" => Ok(Bunq),
233 "buut" => Ok(Buut),
234 "finom" => Ok(Finom),
235 "handelsbanken" => Ok(Handelsbanken),
236 "ing" => Ok(Ing),
237 "knab" => Ok(Knab),
238 "mollie" => Ok(Mollie),
239 "moneyou" => Ok(Moneyou),
240 "n26" => Ok(N26),
241 "nn" => Ok(Nn),
242 "rabobank" => Ok(Rabobank),
243 "regiobank" => Ok(Regiobank),
244 "revolut" => Ok(Revolut),
245 "sns_bank" => Ok(SnsBank),
246 "triodos_bank" => Ok(TriodosBank),
247 "van_lanschot" => Ok(VanLanschot),
248 "yoursafe" => Ok(Yoursafe),
249 v => {
250 tracing::warn!(
251 "Unknown value '{}' for enum '{}'",
252 v,
253 "PaymentMethodDetailsIdealBank"
254 );
255 Ok(Unknown(v.to_owned()))
256 }
257 }
258 }
259}
260impl std::fmt::Display for PaymentMethodDetailsIdealBank {
261 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
262 f.write_str(self.as_str())
263 }
264}
265
266impl std::fmt::Debug for PaymentMethodDetailsIdealBank {
267 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
268 f.write_str(self.as_str())
269 }
270}
271#[cfg(feature = "serialize")]
272impl serde::Serialize for PaymentMethodDetailsIdealBank {
273 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
274 where
275 S: serde::Serializer,
276 {
277 serializer.serialize_str(self.as_str())
278 }
279}
280impl miniserde::Deserialize for PaymentMethodDetailsIdealBank {
281 fn begin(out: &mut Option<Self>) -> &mut dyn miniserde::de::Visitor {
282 crate::Place::new(out)
283 }
284}
285
286impl miniserde::de::Visitor for crate::Place<PaymentMethodDetailsIdealBank> {
287 fn string(&mut self, s: &str) -> miniserde::Result<()> {
288 use std::str::FromStr;
289 self.out = Some(PaymentMethodDetailsIdealBank::from_str(s).expect("infallible"));
290 Ok(())
291 }
292}
293
294stripe_types::impl_from_val_with_from_str!(PaymentMethodDetailsIdealBank);
295#[cfg(feature = "deserialize")]
296impl<'de> serde::Deserialize<'de> for PaymentMethodDetailsIdealBank {
297 fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
298 use std::str::FromStr;
299 let s: std::borrow::Cow<'de, str> = serde::Deserialize::deserialize(deserializer)?;
300 Ok(Self::from_str(&s).expect("infallible"))
301 }
302}
303#[derive(Clone, Eq, PartialEq)]
305#[non_exhaustive]
306pub enum PaymentMethodDetailsIdealBic {
307 Abnanl2a,
308 Asnbnl21,
309 Bitsnl2a,
310 Bunqnl2a,
311 Buutnl2a,
312 Fnomnl22,
313 Fvlbnl22,
314 Handnl2a,
315 Ingbnl2a,
316 Knabnl2h,
317 Mllenl2a,
318 Moyonl21,
319 Nnbanl2g,
320 Ntsbdeb1,
321 Rabonl2u,
322 Rbrbnl21,
323 Revoie23,
324 Revolt21,
325 Snsbnl2a,
326 Trionl2u,
327 Unknown(String),
329}
330impl PaymentMethodDetailsIdealBic {
331 pub fn as_str(&self) -> &str {
332 use PaymentMethodDetailsIdealBic::*;
333 match self {
334 Abnanl2a => "ABNANL2A",
335 Asnbnl21 => "ASNBNL21",
336 Bitsnl2a => "BITSNL2A",
337 Bunqnl2a => "BUNQNL2A",
338 Buutnl2a => "BUUTNL2A",
339 Fnomnl22 => "FNOMNL22",
340 Fvlbnl22 => "FVLBNL22",
341 Handnl2a => "HANDNL2A",
342 Ingbnl2a => "INGBNL2A",
343 Knabnl2h => "KNABNL2H",
344 Mllenl2a => "MLLENL2A",
345 Moyonl21 => "MOYONL21",
346 Nnbanl2g => "NNBANL2G",
347 Ntsbdeb1 => "NTSBDEB1",
348 Rabonl2u => "RABONL2U",
349 Rbrbnl21 => "RBRBNL21",
350 Revoie23 => "REVOIE23",
351 Revolt21 => "REVOLT21",
352 Snsbnl2a => "SNSBNL2A",
353 Trionl2u => "TRIONL2U",
354 Unknown(v) => v,
355 }
356 }
357}
358
359impl std::str::FromStr for PaymentMethodDetailsIdealBic {
360 type Err = std::convert::Infallible;
361 fn from_str(s: &str) -> Result<Self, Self::Err> {
362 use PaymentMethodDetailsIdealBic::*;
363 match s {
364 "ABNANL2A" => Ok(Abnanl2a),
365 "ASNBNL21" => Ok(Asnbnl21),
366 "BITSNL2A" => Ok(Bitsnl2a),
367 "BUNQNL2A" => Ok(Bunqnl2a),
368 "BUUTNL2A" => Ok(Buutnl2a),
369 "FNOMNL22" => Ok(Fnomnl22),
370 "FVLBNL22" => Ok(Fvlbnl22),
371 "HANDNL2A" => Ok(Handnl2a),
372 "INGBNL2A" => Ok(Ingbnl2a),
373 "KNABNL2H" => Ok(Knabnl2h),
374 "MLLENL2A" => Ok(Mllenl2a),
375 "MOYONL21" => Ok(Moyonl21),
376 "NNBANL2G" => Ok(Nnbanl2g),
377 "NTSBDEB1" => Ok(Ntsbdeb1),
378 "RABONL2U" => Ok(Rabonl2u),
379 "RBRBNL21" => Ok(Rbrbnl21),
380 "REVOIE23" => Ok(Revoie23),
381 "REVOLT21" => Ok(Revolt21),
382 "SNSBNL2A" => Ok(Snsbnl2a),
383 "TRIONL2U" => Ok(Trionl2u),
384 v => {
385 tracing::warn!(
386 "Unknown value '{}' for enum '{}'",
387 v,
388 "PaymentMethodDetailsIdealBic"
389 );
390 Ok(Unknown(v.to_owned()))
391 }
392 }
393 }
394}
395impl std::fmt::Display for PaymentMethodDetailsIdealBic {
396 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
397 f.write_str(self.as_str())
398 }
399}
400
401impl std::fmt::Debug for PaymentMethodDetailsIdealBic {
402 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
403 f.write_str(self.as_str())
404 }
405}
406#[cfg(feature = "serialize")]
407impl serde::Serialize for PaymentMethodDetailsIdealBic {
408 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
409 where
410 S: serde::Serializer,
411 {
412 serializer.serialize_str(self.as_str())
413 }
414}
415impl miniserde::Deserialize for PaymentMethodDetailsIdealBic {
416 fn begin(out: &mut Option<Self>) -> &mut dyn miniserde::de::Visitor {
417 crate::Place::new(out)
418 }
419}
420
421impl miniserde::de::Visitor for crate::Place<PaymentMethodDetailsIdealBic> {
422 fn string(&mut self, s: &str) -> miniserde::Result<()> {
423 use std::str::FromStr;
424 self.out = Some(PaymentMethodDetailsIdealBic::from_str(s).expect("infallible"));
425 Ok(())
426 }
427}
428
429stripe_types::impl_from_val_with_from_str!(PaymentMethodDetailsIdealBic);
430#[cfg(feature = "deserialize")]
431impl<'de> serde::Deserialize<'de> for PaymentMethodDetailsIdealBic {
432 fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
433 use std::str::FromStr;
434 let s: std::borrow::Cow<'de, str> = serde::Deserialize::deserialize(deserializer)?;
435 Ok(Self::from_str(&s).expect("infallible"))
436 }
437}