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