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