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