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 => {
247                tracing::warn!(
248                    "Unknown value '{}' for enum '{}'",
249                    v,
250                    "PaymentMethodDetailsIdealBank"
251                );
252                Ok(Unknown(v.to_owned()))
253            }
254        }
255    }
256}
257impl std::fmt::Display for PaymentMethodDetailsIdealBank {
258    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
259        f.write_str(self.as_str())
260    }
261}
262
263impl std::fmt::Debug for PaymentMethodDetailsIdealBank {
264    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
265        f.write_str(self.as_str())
266    }
267}
268#[cfg(feature = "serialize")]
269impl serde::Serialize for PaymentMethodDetailsIdealBank {
270    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
271    where
272        S: serde::Serializer,
273    {
274        serializer.serialize_str(self.as_str())
275    }
276}
277impl miniserde::Deserialize for PaymentMethodDetailsIdealBank {
278    fn begin(out: &mut Option<Self>) -> &mut dyn miniserde::de::Visitor {
279        crate::Place::new(out)
280    }
281}
282
283impl miniserde::de::Visitor for crate::Place<PaymentMethodDetailsIdealBank> {
284    fn string(&mut self, s: &str) -> miniserde::Result<()> {
285        use std::str::FromStr;
286        self.out = Some(PaymentMethodDetailsIdealBank::from_str(s).expect("infallible"));
287        Ok(())
288    }
289}
290
291stripe_types::impl_from_val_with_from_str!(PaymentMethodDetailsIdealBank);
292#[cfg(feature = "deserialize")]
293impl<'de> serde::Deserialize<'de> for PaymentMethodDetailsIdealBank {
294    fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
295        use std::str::FromStr;
296        let s: std::borrow::Cow<'de, str> = serde::Deserialize::deserialize(deserializer)?;
297        Ok(Self::from_str(&s).expect("infallible"))
298    }
299}
300/// The Bank Identifier Code of the customer's bank.
301#[derive(Clone, Eq, PartialEq)]
302#[non_exhaustive]
303pub enum PaymentMethodDetailsIdealBic {
304    Abnanl2a,
305    Asnbnl21,
306    Bitsnl2a,
307    Bunqnl2a,
308    Buutnl2a,
309    Fnomnl22,
310    Fvlbnl22,
311    Handnl2a,
312    Ingbnl2a,
313    Knabnl2h,
314    Moyonl21,
315    Nnbanl2g,
316    Ntsbdeb1,
317    Rabonl2u,
318    Rbrbnl21,
319    Revoie23,
320    Revolt21,
321    Snsbnl2a,
322    Trionl2u,
323    /// An unrecognized value from Stripe. Should not be used as a request parameter.
324    Unknown(String),
325}
326impl PaymentMethodDetailsIdealBic {
327    pub fn as_str(&self) -> &str {
328        use PaymentMethodDetailsIdealBic::*;
329        match self {
330            Abnanl2a => "ABNANL2A",
331            Asnbnl21 => "ASNBNL21",
332            Bitsnl2a => "BITSNL2A",
333            Bunqnl2a => "BUNQNL2A",
334            Buutnl2a => "BUUTNL2A",
335            Fnomnl22 => "FNOMNL22",
336            Fvlbnl22 => "FVLBNL22",
337            Handnl2a => "HANDNL2A",
338            Ingbnl2a => "INGBNL2A",
339            Knabnl2h => "KNABNL2H",
340            Moyonl21 => "MOYONL21",
341            Nnbanl2g => "NNBANL2G",
342            Ntsbdeb1 => "NTSBDEB1",
343            Rabonl2u => "RABONL2U",
344            Rbrbnl21 => "RBRBNL21",
345            Revoie23 => "REVOIE23",
346            Revolt21 => "REVOLT21",
347            Snsbnl2a => "SNSBNL2A",
348            Trionl2u => "TRIONL2U",
349            Unknown(v) => v,
350        }
351    }
352}
353
354impl std::str::FromStr for PaymentMethodDetailsIdealBic {
355    type Err = std::convert::Infallible;
356    fn from_str(s: &str) -> Result<Self, Self::Err> {
357        use PaymentMethodDetailsIdealBic::*;
358        match s {
359            "ABNANL2A" => Ok(Abnanl2a),
360            "ASNBNL21" => Ok(Asnbnl21),
361            "BITSNL2A" => Ok(Bitsnl2a),
362            "BUNQNL2A" => Ok(Bunqnl2a),
363            "BUUTNL2A" => Ok(Buutnl2a),
364            "FNOMNL22" => Ok(Fnomnl22),
365            "FVLBNL22" => Ok(Fvlbnl22),
366            "HANDNL2A" => Ok(Handnl2a),
367            "INGBNL2A" => Ok(Ingbnl2a),
368            "KNABNL2H" => Ok(Knabnl2h),
369            "MOYONL21" => Ok(Moyonl21),
370            "NNBANL2G" => Ok(Nnbanl2g),
371            "NTSBDEB1" => Ok(Ntsbdeb1),
372            "RABONL2U" => Ok(Rabonl2u),
373            "RBRBNL21" => Ok(Rbrbnl21),
374            "REVOIE23" => Ok(Revoie23),
375            "REVOLT21" => Ok(Revolt21),
376            "SNSBNL2A" => Ok(Snsbnl2a),
377            "TRIONL2U" => Ok(Trionl2u),
378            v => {
379                tracing::warn!(
380                    "Unknown value '{}' for enum '{}'",
381                    v,
382                    "PaymentMethodDetailsIdealBic"
383                );
384                Ok(Unknown(v.to_owned()))
385            }
386        }
387    }
388}
389impl std::fmt::Display for PaymentMethodDetailsIdealBic {
390    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
391        f.write_str(self.as_str())
392    }
393}
394
395impl std::fmt::Debug for PaymentMethodDetailsIdealBic {
396    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
397        f.write_str(self.as_str())
398    }
399}
400#[cfg(feature = "serialize")]
401impl serde::Serialize for PaymentMethodDetailsIdealBic {
402    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
403    where
404        S: serde::Serializer,
405    {
406        serializer.serialize_str(self.as_str())
407    }
408}
409impl miniserde::Deserialize for PaymentMethodDetailsIdealBic {
410    fn begin(out: &mut Option<Self>) -> &mut dyn miniserde::de::Visitor {
411        crate::Place::new(out)
412    }
413}
414
415impl miniserde::de::Visitor for crate::Place<PaymentMethodDetailsIdealBic> {
416    fn string(&mut self, s: &str) -> miniserde::Result<()> {
417        use std::str::FromStr;
418        self.out = Some(PaymentMethodDetailsIdealBic::from_str(s).expect("infallible"));
419        Ok(())
420    }
421}
422
423stripe_types::impl_from_val_with_from_str!(PaymentMethodDetailsIdealBic);
424#[cfg(feature = "deserialize")]
425impl<'de> serde::Deserialize<'de> for PaymentMethodDetailsIdealBic {
426    fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
427        use std::str::FromStr;
428        let s: std::borrow::Cow<'de, str> = serde::Deserialize::deserialize(deserializer)?;
429        Ok(Self::from_str(&s).expect("infallible"))
430    }
431}