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 => {
247 tracing::warn!(
248 "Unknown value '{}' for enum '{}'",
249 v,
250 "PaymentMethodDetailsIdealBank"
251 );
252 Ok(Unknown(v.to_owned()))
253 }
254 }
255 }
256}
257impl std::fmt::Display for PaymentMethodDetailsIdealBank {
258 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
259 f.write_str(self.as_str())
260 }
261}
262
263impl std::fmt::Debug for PaymentMethodDetailsIdealBank {
264 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
265 f.write_str(self.as_str())
266 }
267}
268#[cfg(feature = "serialize")]
269impl serde::Serialize for PaymentMethodDetailsIdealBank {
270 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
271 where
272 S: serde::Serializer,
273 {
274 serializer.serialize_str(self.as_str())
275 }
276}
277impl miniserde::Deserialize for PaymentMethodDetailsIdealBank {
278 fn begin(out: &mut Option<Self>) -> &mut dyn miniserde::de::Visitor {
279 crate::Place::new(out)
280 }
281}
282
283impl miniserde::de::Visitor for crate::Place<PaymentMethodDetailsIdealBank> {
284 fn string(&mut self, s: &str) -> miniserde::Result<()> {
285 use std::str::FromStr;
286 self.out = Some(PaymentMethodDetailsIdealBank::from_str(s).expect("infallible"));
287 Ok(())
288 }
289}
290
291stripe_types::impl_from_val_with_from_str!(PaymentMethodDetailsIdealBank);
292#[cfg(feature = "deserialize")]
293impl<'de> serde::Deserialize<'de> for PaymentMethodDetailsIdealBank {
294 fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
295 use std::str::FromStr;
296 let s: std::borrow::Cow<'de, str> = serde::Deserialize::deserialize(deserializer)?;
297 Ok(Self::from_str(&s).expect("infallible"))
298 }
299}
300#[derive(Clone, Eq, PartialEq)]
302#[non_exhaustive]
303pub enum PaymentMethodDetailsIdealBic {
304 Abnanl2a,
305 Asnbnl21,
306 Bitsnl2a,
307 Bunqnl2a,
308 Buutnl2a,
309 Fnomnl22,
310 Fvlbnl22,
311 Handnl2a,
312 Ingbnl2a,
313 Knabnl2h,
314 Moyonl21,
315 Nnbanl2g,
316 Ntsbdeb1,
317 Rabonl2u,
318 Rbrbnl21,
319 Revoie23,
320 Revolt21,
321 Snsbnl2a,
322 Trionl2u,
323 Unknown(String),
325}
326impl PaymentMethodDetailsIdealBic {
327 pub fn as_str(&self) -> &str {
328 use PaymentMethodDetailsIdealBic::*;
329 match self {
330 Abnanl2a => "ABNANL2A",
331 Asnbnl21 => "ASNBNL21",
332 Bitsnl2a => "BITSNL2A",
333 Bunqnl2a => "BUNQNL2A",
334 Buutnl2a => "BUUTNL2A",
335 Fnomnl22 => "FNOMNL22",
336 Fvlbnl22 => "FVLBNL22",
337 Handnl2a => "HANDNL2A",
338 Ingbnl2a => "INGBNL2A",
339 Knabnl2h => "KNABNL2H",
340 Moyonl21 => "MOYONL21",
341 Nnbanl2g => "NNBANL2G",
342 Ntsbdeb1 => "NTSBDEB1",
343 Rabonl2u => "RABONL2U",
344 Rbrbnl21 => "RBRBNL21",
345 Revoie23 => "REVOIE23",
346 Revolt21 => "REVOLT21",
347 Snsbnl2a => "SNSBNL2A",
348 Trionl2u => "TRIONL2U",
349 Unknown(v) => v,
350 }
351 }
352}
353
354impl std::str::FromStr for PaymentMethodDetailsIdealBic {
355 type Err = std::convert::Infallible;
356 fn from_str(s: &str) -> Result<Self, Self::Err> {
357 use PaymentMethodDetailsIdealBic::*;
358 match s {
359 "ABNANL2A" => Ok(Abnanl2a),
360 "ASNBNL21" => Ok(Asnbnl21),
361 "BITSNL2A" => Ok(Bitsnl2a),
362 "BUNQNL2A" => Ok(Bunqnl2a),
363 "BUUTNL2A" => Ok(Buutnl2a),
364 "FNOMNL22" => Ok(Fnomnl22),
365 "FVLBNL22" => Ok(Fvlbnl22),
366 "HANDNL2A" => Ok(Handnl2a),
367 "INGBNL2A" => Ok(Ingbnl2a),
368 "KNABNL2H" => Ok(Knabnl2h),
369 "MOYONL21" => Ok(Moyonl21),
370 "NNBANL2G" => Ok(Nnbanl2g),
371 "NTSBDEB1" => Ok(Ntsbdeb1),
372 "RABONL2U" => Ok(Rabonl2u),
373 "RBRBNL21" => Ok(Rbrbnl21),
374 "REVOIE23" => Ok(Revoie23),
375 "REVOLT21" => Ok(Revolt21),
376 "SNSBNL2A" => Ok(Snsbnl2a),
377 "TRIONL2U" => Ok(Trionl2u),
378 v => {
379 tracing::warn!(
380 "Unknown value '{}' for enum '{}'",
381 v,
382 "PaymentMethodDetailsIdealBic"
383 );
384 Ok(Unknown(v.to_owned()))
385 }
386 }
387 }
388}
389impl std::fmt::Display for PaymentMethodDetailsIdealBic {
390 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
391 f.write_str(self.as_str())
392 }
393}
394
395impl std::fmt::Debug for PaymentMethodDetailsIdealBic {
396 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
397 f.write_str(self.as_str())
398 }
399}
400#[cfg(feature = "serialize")]
401impl serde::Serialize for PaymentMethodDetailsIdealBic {
402 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
403 where
404 S: serde::Serializer,
405 {
406 serializer.serialize_str(self.as_str())
407 }
408}
409impl miniserde::Deserialize for PaymentMethodDetailsIdealBic {
410 fn begin(out: &mut Option<Self>) -> &mut dyn miniserde::de::Visitor {
411 crate::Place::new(out)
412 }
413}
414
415impl miniserde::de::Visitor for crate::Place<PaymentMethodDetailsIdealBic> {
416 fn string(&mut self, s: &str) -> miniserde::Result<()> {
417 use std::str::FromStr;
418 self.out = Some(PaymentMethodDetailsIdealBic::from_str(s).expect("infallible"));
419 Ok(())
420 }
421}
422
423stripe_types::impl_from_val_with_from_str!(PaymentMethodDetailsIdealBic);
424#[cfg(feature = "deserialize")]
425impl<'de> serde::Deserialize<'de> for PaymentMethodDetailsIdealBic {
426 fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
427 use std::str::FromStr;
428 let s: std::borrow::Cow<'de, str> = serde::Deserialize::deserialize(deserializer)?;
429 Ok(Self::from_str(&s).expect("infallible"))
430 }
431}