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