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