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