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