stripe_shared/
setup_attempt_payment_method_details_ideal.rs

1#[derive(Clone, Debug)]
2#[cfg_attr(feature = "serialize", derive(serde::Serialize))]
3#[cfg_attr(feature = "deserialize", derive(serde::Deserialize))]
4pub struct SetupAttemptPaymentMethodDetailsIdeal {
5    /// The customer's bank.
6    /// Can be one of `abn_amro`, `asn_bank`, `bunq`, `buut`, `finom`, `handelsbanken`, `ing`, `knab`, `mollie`, `moneyou`, `n26`, `nn`, `rabobank`, `regiobank`, `revolut`, `sns_bank`, `triodos_bank`, `van_lanschot`, or `yoursafe`.
7    pub bank: Option<SetupAttemptPaymentMethodDetailsIdealBank>,
8    /// The Bank Identifier Code of the customer's bank.
9    pub bic: Option<SetupAttemptPaymentMethodDetailsIdealBic>,
10    /// The ID of the SEPA Direct Debit PaymentMethod which was generated by this SetupAttempt.
11    pub generated_sepa_debit: Option<stripe_types::Expandable<stripe_shared::PaymentMethod>>,
12    /// The mandate for the SEPA Direct Debit PaymentMethod which was generated by this SetupAttempt.
13    pub generated_sepa_debit_mandate: Option<stripe_types::Expandable<stripe_shared::Mandate>>,
14    /// Last four characters of the IBAN.
15    pub iban_last4: Option<String>,
16    /// Owner's verified full name. Values are verified or provided by iDEAL directly
17    /// (if supported) at the time of authorization or settlement. They cannot be set or mutated.
18    pub verified_name: Option<String>,
19}
20#[doc(hidden)]
21pub struct SetupAttemptPaymentMethodDetailsIdealBuilder {
22    bank: Option<Option<SetupAttemptPaymentMethodDetailsIdealBank>>,
23    bic: Option<Option<SetupAttemptPaymentMethodDetailsIdealBic>>,
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 SetupAttemptPaymentMethodDetailsIdeal {
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<SetupAttemptPaymentMethodDetailsIdeal>,
54        builder: SetupAttemptPaymentMethodDetailsIdealBuilder,
55    }
56
57    impl Visitor for Place<SetupAttemptPaymentMethodDetailsIdeal> {
58        fn map(&mut self) -> Result<Box<dyn Map + '_>> {
59            Ok(Box::new(Builder {
60                out: &mut self.out,
61                builder: SetupAttemptPaymentMethodDetailsIdealBuilder::deser_default(),
62            }))
63        }
64    }
65
66    impl MapBuilder for SetupAttemptPaymentMethodDetailsIdealBuilder {
67        type Out = SetupAttemptPaymentMethodDetailsIdeal;
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 SetupAttemptPaymentMethodDetailsIdeal {
135        type Builder = SetupAttemptPaymentMethodDetailsIdealBuilder;
136    }
137
138    impl FromValueOpt for SetupAttemptPaymentMethodDetailsIdeal {
139        fn from_value(v: Value) -> Option<Self> {
140            let Value::Object(obj) = v else {
141                return None;
142            };
143            let mut b = SetupAttemptPaymentMethodDetailsIdealBuilder::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/// The customer's bank.
162/// Can be one of `abn_amro`, `asn_bank`, `bunq`, `buut`, `finom`, `handelsbanken`, `ing`, `knab`, `mollie`, `moneyou`, `n26`, `nn`, `rabobank`, `regiobank`, `revolut`, `sns_bank`, `triodos_bank`, `van_lanschot`, or `yoursafe`.
163#[derive(Clone, Eq, PartialEq)]
164#[non_exhaustive]
165pub enum SetupAttemptPaymentMethodDetailsIdealBank {
166    AbnAmro,
167    AsnBank,
168    Bunq,
169    Buut,
170    Finom,
171    Handelsbanken,
172    Ing,
173    Knab,
174    Mollie,
175    Moneyou,
176    N26,
177    Nn,
178    Rabobank,
179    Regiobank,
180    Revolut,
181    SnsBank,
182    TriodosBank,
183    VanLanschot,
184    Yoursafe,
185    /// An unrecognized value from Stripe. Should not be used as a request parameter.
186    Unknown(String),
187}
188impl SetupAttemptPaymentMethodDetailsIdealBank {
189    pub fn as_str(&self) -> &str {
190        use SetupAttemptPaymentMethodDetailsIdealBank::*;
191        match self {
192            AbnAmro => "abn_amro",
193            AsnBank => "asn_bank",
194            Bunq => "bunq",
195            Buut => "buut",
196            Finom => "finom",
197            Handelsbanken => "handelsbanken",
198            Ing => "ing",
199            Knab => "knab",
200            Mollie => "mollie",
201            Moneyou => "moneyou",
202            N26 => "n26",
203            Nn => "nn",
204            Rabobank => "rabobank",
205            Regiobank => "regiobank",
206            Revolut => "revolut",
207            SnsBank => "sns_bank",
208            TriodosBank => "triodos_bank",
209            VanLanschot => "van_lanschot",
210            Yoursafe => "yoursafe",
211            Unknown(v) => v,
212        }
213    }
214}
215
216impl std::str::FromStr for SetupAttemptPaymentMethodDetailsIdealBank {
217    type Err = std::convert::Infallible;
218    fn from_str(s: &str) -> Result<Self, Self::Err> {
219        use SetupAttemptPaymentMethodDetailsIdealBank::*;
220        match s {
221            "abn_amro" => Ok(AbnAmro),
222            "asn_bank" => Ok(AsnBank),
223            "bunq" => Ok(Bunq),
224            "buut" => Ok(Buut),
225            "finom" => Ok(Finom),
226            "handelsbanken" => Ok(Handelsbanken),
227            "ing" => Ok(Ing),
228            "knab" => Ok(Knab),
229            "mollie" => Ok(Mollie),
230            "moneyou" => Ok(Moneyou),
231            "n26" => Ok(N26),
232            "nn" => Ok(Nn),
233            "rabobank" => Ok(Rabobank),
234            "regiobank" => Ok(Regiobank),
235            "revolut" => Ok(Revolut),
236            "sns_bank" => Ok(SnsBank),
237            "triodos_bank" => Ok(TriodosBank),
238            "van_lanschot" => Ok(VanLanschot),
239            "yoursafe" => Ok(Yoursafe),
240            v => {
241                tracing::warn!(
242                    "Unknown value '{}' for enum '{}'",
243                    v,
244                    "SetupAttemptPaymentMethodDetailsIdealBank"
245                );
246                Ok(Unknown(v.to_owned()))
247            }
248        }
249    }
250}
251impl std::fmt::Display for SetupAttemptPaymentMethodDetailsIdealBank {
252    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
253        f.write_str(self.as_str())
254    }
255}
256
257impl std::fmt::Debug for SetupAttemptPaymentMethodDetailsIdealBank {
258    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
259        f.write_str(self.as_str())
260    }
261}
262#[cfg(feature = "serialize")]
263impl serde::Serialize for SetupAttemptPaymentMethodDetailsIdealBank {
264    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
265    where
266        S: serde::Serializer,
267    {
268        serializer.serialize_str(self.as_str())
269    }
270}
271impl miniserde::Deserialize for SetupAttemptPaymentMethodDetailsIdealBank {
272    fn begin(out: &mut Option<Self>) -> &mut dyn miniserde::de::Visitor {
273        crate::Place::new(out)
274    }
275}
276
277impl miniserde::de::Visitor for crate::Place<SetupAttemptPaymentMethodDetailsIdealBank> {
278    fn string(&mut self, s: &str) -> miniserde::Result<()> {
279        use std::str::FromStr;
280        self.out =
281            Some(SetupAttemptPaymentMethodDetailsIdealBank::from_str(s).expect("infallible"));
282        Ok(())
283    }
284}
285
286stripe_types::impl_from_val_with_from_str!(SetupAttemptPaymentMethodDetailsIdealBank);
287#[cfg(feature = "deserialize")]
288impl<'de> serde::Deserialize<'de> for SetupAttemptPaymentMethodDetailsIdealBank {
289    fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
290        use std::str::FromStr;
291        let s: std::borrow::Cow<'de, str> = serde::Deserialize::deserialize(deserializer)?;
292        Ok(Self::from_str(&s).expect("infallible"))
293    }
294}
295/// The Bank Identifier Code of the customer's bank.
296#[derive(Clone, Eq, PartialEq)]
297#[non_exhaustive]
298pub enum SetupAttemptPaymentMethodDetailsIdealBic {
299    Abnanl2a,
300    Asnbnl21,
301    Bitsnl2a,
302    Bunqnl2a,
303    Buutnl2a,
304    Fnomnl22,
305    Fvlbnl22,
306    Handnl2a,
307    Ingbnl2a,
308    Knabnl2h,
309    Mllenl2a,
310    Moyonl21,
311    Nnbanl2g,
312    Ntsbdeb1,
313    Rabonl2u,
314    Rbrbnl21,
315    Revoie23,
316    Revolt21,
317    Snsbnl2a,
318    Trionl2u,
319    /// An unrecognized value from Stripe. Should not be used as a request parameter.
320    Unknown(String),
321}
322impl SetupAttemptPaymentMethodDetailsIdealBic {
323    pub fn as_str(&self) -> &str {
324        use SetupAttemptPaymentMethodDetailsIdealBic::*;
325        match self {
326            Abnanl2a => "ABNANL2A",
327            Asnbnl21 => "ASNBNL21",
328            Bitsnl2a => "BITSNL2A",
329            Bunqnl2a => "BUNQNL2A",
330            Buutnl2a => "BUUTNL2A",
331            Fnomnl22 => "FNOMNL22",
332            Fvlbnl22 => "FVLBNL22",
333            Handnl2a => "HANDNL2A",
334            Ingbnl2a => "INGBNL2A",
335            Knabnl2h => "KNABNL2H",
336            Mllenl2a => "MLLENL2A",
337            Moyonl21 => "MOYONL21",
338            Nnbanl2g => "NNBANL2G",
339            Ntsbdeb1 => "NTSBDEB1",
340            Rabonl2u => "RABONL2U",
341            Rbrbnl21 => "RBRBNL21",
342            Revoie23 => "REVOIE23",
343            Revolt21 => "REVOLT21",
344            Snsbnl2a => "SNSBNL2A",
345            Trionl2u => "TRIONL2U",
346            Unknown(v) => v,
347        }
348    }
349}
350
351impl std::str::FromStr for SetupAttemptPaymentMethodDetailsIdealBic {
352    type Err = std::convert::Infallible;
353    fn from_str(s: &str) -> Result<Self, Self::Err> {
354        use SetupAttemptPaymentMethodDetailsIdealBic::*;
355        match s {
356            "ABNANL2A" => Ok(Abnanl2a),
357            "ASNBNL21" => Ok(Asnbnl21),
358            "BITSNL2A" => Ok(Bitsnl2a),
359            "BUNQNL2A" => Ok(Bunqnl2a),
360            "BUUTNL2A" => Ok(Buutnl2a),
361            "FNOMNL22" => Ok(Fnomnl22),
362            "FVLBNL22" => Ok(Fvlbnl22),
363            "HANDNL2A" => Ok(Handnl2a),
364            "INGBNL2A" => Ok(Ingbnl2a),
365            "KNABNL2H" => Ok(Knabnl2h),
366            "MLLENL2A" => Ok(Mllenl2a),
367            "MOYONL21" => Ok(Moyonl21),
368            "NNBANL2G" => Ok(Nnbanl2g),
369            "NTSBDEB1" => Ok(Ntsbdeb1),
370            "RABONL2U" => Ok(Rabonl2u),
371            "RBRBNL21" => Ok(Rbrbnl21),
372            "REVOIE23" => Ok(Revoie23),
373            "REVOLT21" => Ok(Revolt21),
374            "SNSBNL2A" => Ok(Snsbnl2a),
375            "TRIONL2U" => Ok(Trionl2u),
376            v => {
377                tracing::warn!(
378                    "Unknown value '{}' for enum '{}'",
379                    v,
380                    "SetupAttemptPaymentMethodDetailsIdealBic"
381                );
382                Ok(Unknown(v.to_owned()))
383            }
384        }
385    }
386}
387impl std::fmt::Display for SetupAttemptPaymentMethodDetailsIdealBic {
388    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
389        f.write_str(self.as_str())
390    }
391}
392
393impl std::fmt::Debug for SetupAttemptPaymentMethodDetailsIdealBic {
394    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
395        f.write_str(self.as_str())
396    }
397}
398#[cfg(feature = "serialize")]
399impl serde::Serialize for SetupAttemptPaymentMethodDetailsIdealBic {
400    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
401    where
402        S: serde::Serializer,
403    {
404        serializer.serialize_str(self.as_str())
405    }
406}
407impl miniserde::Deserialize for SetupAttemptPaymentMethodDetailsIdealBic {
408    fn begin(out: &mut Option<Self>) -> &mut dyn miniserde::de::Visitor {
409        crate::Place::new(out)
410    }
411}
412
413impl miniserde::de::Visitor for crate::Place<SetupAttemptPaymentMethodDetailsIdealBic> {
414    fn string(&mut self, s: &str) -> miniserde::Result<()> {
415        use std::str::FromStr;
416        self.out = Some(SetupAttemptPaymentMethodDetailsIdealBic::from_str(s).expect("infallible"));
417        Ok(())
418    }
419}
420
421stripe_types::impl_from_val_with_from_str!(SetupAttemptPaymentMethodDetailsIdealBic);
422#[cfg(feature = "deserialize")]
423impl<'de> serde::Deserialize<'de> for SetupAttemptPaymentMethodDetailsIdealBic {
424    fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
425        use std::str::FromStr;
426        let s: std::borrow::Cow<'de, str> = serde::Deserialize::deserialize(deserializer)?;
427        Ok(Self::from_str(&s).expect("infallible"))
428    }
429}