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<'a> Map for Builder<'a> {
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 Handelsbanken,
172 Ing,
173 Knab,
174 Moneyou,
175 N26,
176 Nn,
177 Rabobank,
178 Regiobank,
179 Revolut,
180 SnsBank,
181 TriodosBank,
182 VanLanschot,
183 Yoursafe,
184 Unknown(String),
186}
187impl PaymentMethodDetailsIdealBank {
188 pub fn as_str(&self) -> &str {
189 use PaymentMethodDetailsIdealBank::*;
190 match self {
191 AbnAmro => "abn_amro",
192 AsnBank => "asn_bank",
193 Bunq => "bunq",
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 "handelsbanken" => Ok(Handelsbanken),
221 "ing" => Ok(Ing),
222 "knab" => Ok(Knab),
223 "moneyou" => Ok(Moneyou),
224 "n26" => Ok(N26),
225 "nn" => Ok(Nn),
226 "rabobank" => Ok(Rabobank),
227 "regiobank" => Ok(Regiobank),
228 "revolut" => Ok(Revolut),
229 "sns_bank" => Ok(SnsBank),
230 "triodos_bank" => Ok(TriodosBank),
231 "van_lanschot" => Ok(VanLanschot),
232 "yoursafe" => Ok(Yoursafe),
233 v => Ok(Unknown(v.to_owned())),
234 }
235 }
236}
237impl std::fmt::Display for PaymentMethodDetailsIdealBank {
238 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
239 f.write_str(self.as_str())
240 }
241}
242
243impl std::fmt::Debug for PaymentMethodDetailsIdealBank {
244 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
245 f.write_str(self.as_str())
246 }
247}
248#[cfg(feature = "serialize")]
249impl serde::Serialize for PaymentMethodDetailsIdealBank {
250 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
251 where
252 S: serde::Serializer,
253 {
254 serializer.serialize_str(self.as_str())
255 }
256}
257impl miniserde::Deserialize for PaymentMethodDetailsIdealBank {
258 fn begin(out: &mut Option<Self>) -> &mut dyn miniserde::de::Visitor {
259 crate::Place::new(out)
260 }
261}
262
263impl miniserde::de::Visitor for crate::Place<PaymentMethodDetailsIdealBank> {
264 fn string(&mut self, s: &str) -> miniserde::Result<()> {
265 use std::str::FromStr;
266 self.out = Some(PaymentMethodDetailsIdealBank::from_str(s).unwrap());
267 Ok(())
268 }
269}
270
271stripe_types::impl_from_val_with_from_str!(PaymentMethodDetailsIdealBank);
272#[cfg(feature = "deserialize")]
273impl<'de> serde::Deserialize<'de> for PaymentMethodDetailsIdealBank {
274 fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
275 use std::str::FromStr;
276 let s: std::borrow::Cow<'de, str> = serde::Deserialize::deserialize(deserializer)?;
277 Ok(Self::from_str(&s).unwrap())
278 }
279}
280#[derive(Clone, Eq, PartialEq)]
282#[non_exhaustive]
283pub enum PaymentMethodDetailsIdealBic {
284 Abnanl2a,
285 Asnbnl21,
286 Bitsnl2a,
287 Bunqnl2a,
288 Fvlbnl22,
289 Handnl2a,
290 Ingbnl2a,
291 Knabnl2h,
292 Moyonl21,
293 Nnbanl2g,
294 Ntsbdeb1,
295 Rabonl2u,
296 Rbrbnl21,
297 Revoie23,
298 Revolt21,
299 Snsbnl2a,
300 Trionl2u,
301 Unknown(String),
303}
304impl PaymentMethodDetailsIdealBic {
305 pub fn as_str(&self) -> &str {
306 use PaymentMethodDetailsIdealBic::*;
307 match self {
308 Abnanl2a => "ABNANL2A",
309 Asnbnl21 => "ASNBNL21",
310 Bitsnl2a => "BITSNL2A",
311 Bunqnl2a => "BUNQNL2A",
312 Fvlbnl22 => "FVLBNL22",
313 Handnl2a => "HANDNL2A",
314 Ingbnl2a => "INGBNL2A",
315 Knabnl2h => "KNABNL2H",
316 Moyonl21 => "MOYONL21",
317 Nnbanl2g => "NNBANL2G",
318 Ntsbdeb1 => "NTSBDEB1",
319 Rabonl2u => "RABONL2U",
320 Rbrbnl21 => "RBRBNL21",
321 Revoie23 => "REVOIE23",
322 Revolt21 => "REVOLT21",
323 Snsbnl2a => "SNSBNL2A",
324 Trionl2u => "TRIONL2U",
325 Unknown(v) => v,
326 }
327 }
328}
329
330impl std::str::FromStr for PaymentMethodDetailsIdealBic {
331 type Err = std::convert::Infallible;
332 fn from_str(s: &str) -> Result<Self, Self::Err> {
333 use PaymentMethodDetailsIdealBic::*;
334 match s {
335 "ABNANL2A" => Ok(Abnanl2a),
336 "ASNBNL21" => Ok(Asnbnl21),
337 "BITSNL2A" => Ok(Bitsnl2a),
338 "BUNQNL2A" => Ok(Bunqnl2a),
339 "FVLBNL22" => Ok(Fvlbnl22),
340 "HANDNL2A" => Ok(Handnl2a),
341 "INGBNL2A" => Ok(Ingbnl2a),
342 "KNABNL2H" => Ok(Knabnl2h),
343 "MOYONL21" => Ok(Moyonl21),
344 "NNBANL2G" => Ok(Nnbanl2g),
345 "NTSBDEB1" => Ok(Ntsbdeb1),
346 "RABONL2U" => Ok(Rabonl2u),
347 "RBRBNL21" => Ok(Rbrbnl21),
348 "REVOIE23" => Ok(Revoie23),
349 "REVOLT21" => Ok(Revolt21),
350 "SNSBNL2A" => Ok(Snsbnl2a),
351 "TRIONL2U" => Ok(Trionl2u),
352 v => Ok(Unknown(v.to_owned())),
353 }
354 }
355}
356impl std::fmt::Display for PaymentMethodDetailsIdealBic {
357 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
358 f.write_str(self.as_str())
359 }
360}
361
362impl std::fmt::Debug for PaymentMethodDetailsIdealBic {
363 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
364 f.write_str(self.as_str())
365 }
366}
367#[cfg(feature = "serialize")]
368impl serde::Serialize for PaymentMethodDetailsIdealBic {
369 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
370 where
371 S: serde::Serializer,
372 {
373 serializer.serialize_str(self.as_str())
374 }
375}
376impl miniserde::Deserialize for PaymentMethodDetailsIdealBic {
377 fn begin(out: &mut Option<Self>) -> &mut dyn miniserde::de::Visitor {
378 crate::Place::new(out)
379 }
380}
381
382impl miniserde::de::Visitor for crate::Place<PaymentMethodDetailsIdealBic> {
383 fn string(&mut self, s: &str) -> miniserde::Result<()> {
384 use std::str::FromStr;
385 self.out = Some(PaymentMethodDetailsIdealBic::from_str(s).unwrap());
386 Ok(())
387 }
388}
389
390stripe_types::impl_from_val_with_from_str!(PaymentMethodDetailsIdealBic);
391#[cfg(feature = "deserialize")]
392impl<'de> serde::Deserialize<'de> for PaymentMethodDetailsIdealBic {
393 fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
394 use std::str::FromStr;
395 let s: std::borrow::Cow<'de, str> = serde::Deserialize::deserialize(deserializer)?;
396 Ok(Self::from_str(&s).unwrap())
397 }
398}