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