Skip to main content

stripe_shared/
setup_intent_payment_method_options.rs

1#[derive(Clone, Eq, PartialEq)]
2#[cfg_attr(not(feature = "redact-generated-debug"), derive(Debug))]
3#[cfg_attr(feature = "serialize", derive(serde::Serialize))]
4#[cfg_attr(feature = "deserialize", derive(serde::Deserialize))]
5pub struct SetupIntentPaymentMethodOptions {
6    pub acss_debit: Option<stripe_shared::SetupIntentPaymentMethodOptionsAcssDebit>,
7    pub amazon_pay: Option<stripe_shared::SetupIntentPaymentMethodOptionsAmazonPay>,
8    pub bacs_debit: Option<stripe_shared::SetupIntentPaymentMethodOptionsBacsDebit>,
9    pub card: Option<stripe_shared::SetupIntentPaymentMethodOptionsCard>,
10    pub card_present: Option<stripe_shared::SetupIntentPaymentMethodOptionsCardPresent>,
11    pub klarna: Option<stripe_shared::SetupIntentPaymentMethodOptionsKlarna>,
12    pub link: Option<stripe_shared::SetupIntentPaymentMethodOptionsLink>,
13    pub paypal: Option<stripe_shared::SetupIntentPaymentMethodOptionsPaypal>,
14    pub payto: Option<stripe_shared::SetupIntentPaymentMethodOptionsPayto>,
15    pub sepa_debit: Option<stripe_shared::SetupIntentPaymentMethodOptionsSepaDebit>,
16    pub upi: Option<stripe_shared::SetupIntentPaymentMethodOptionsUpi>,
17    pub us_bank_account: Option<stripe_shared::SetupIntentPaymentMethodOptionsUsBankAccount>,
18}
19#[cfg(feature = "redact-generated-debug")]
20impl std::fmt::Debug for SetupIntentPaymentMethodOptions {
21    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
22        f.debug_struct("SetupIntentPaymentMethodOptions").finish_non_exhaustive()
23    }
24}
25#[doc(hidden)]
26pub struct SetupIntentPaymentMethodOptionsBuilder {
27    acss_debit: Option<Option<stripe_shared::SetupIntentPaymentMethodOptionsAcssDebit>>,
28    amazon_pay: Option<Option<stripe_shared::SetupIntentPaymentMethodOptionsAmazonPay>>,
29    bacs_debit: Option<Option<stripe_shared::SetupIntentPaymentMethodOptionsBacsDebit>>,
30    card: Option<Option<stripe_shared::SetupIntentPaymentMethodOptionsCard>>,
31    card_present: Option<Option<stripe_shared::SetupIntentPaymentMethodOptionsCardPresent>>,
32    klarna: Option<Option<stripe_shared::SetupIntentPaymentMethodOptionsKlarna>>,
33    link: Option<Option<stripe_shared::SetupIntentPaymentMethodOptionsLink>>,
34    paypal: Option<Option<stripe_shared::SetupIntentPaymentMethodOptionsPaypal>>,
35    payto: Option<Option<stripe_shared::SetupIntentPaymentMethodOptionsPayto>>,
36    sepa_debit: Option<Option<stripe_shared::SetupIntentPaymentMethodOptionsSepaDebit>>,
37    upi: Option<Option<stripe_shared::SetupIntentPaymentMethodOptionsUpi>>,
38    us_bank_account: Option<Option<stripe_shared::SetupIntentPaymentMethodOptionsUsBankAccount>>,
39}
40
41#[allow(
42    unused_variables,
43    irrefutable_let_patterns,
44    clippy::let_unit_value,
45    clippy::match_single_binding,
46    clippy::single_match
47)]
48const _: () = {
49    use miniserde::de::{Map, Visitor};
50    use miniserde::json::Value;
51    use miniserde::{Deserialize, Result, make_place};
52    use stripe_types::miniserde_helpers::FromValueOpt;
53    use stripe_types::{MapBuilder, ObjectDeser};
54
55    make_place!(Place);
56
57    impl Deserialize for SetupIntentPaymentMethodOptions {
58        fn begin(out: &mut Option<Self>) -> &mut dyn Visitor {
59            Place::new(out)
60        }
61    }
62
63    struct Builder<'a> {
64        out: &'a mut Option<SetupIntentPaymentMethodOptions>,
65        builder: SetupIntentPaymentMethodOptionsBuilder,
66    }
67
68    impl Visitor for Place<SetupIntentPaymentMethodOptions> {
69        fn map(&mut self) -> Result<Box<dyn Map + '_>> {
70            Ok(Box::new(Builder {
71                out: &mut self.out,
72                builder: SetupIntentPaymentMethodOptionsBuilder::deser_default(),
73            }))
74        }
75    }
76
77    impl MapBuilder for SetupIntentPaymentMethodOptionsBuilder {
78        type Out = SetupIntentPaymentMethodOptions;
79        fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
80            Ok(match k {
81                "acss_debit" => Deserialize::begin(&mut self.acss_debit),
82                "amazon_pay" => Deserialize::begin(&mut self.amazon_pay),
83                "bacs_debit" => Deserialize::begin(&mut self.bacs_debit),
84                "card" => Deserialize::begin(&mut self.card),
85                "card_present" => Deserialize::begin(&mut self.card_present),
86                "klarna" => Deserialize::begin(&mut self.klarna),
87                "link" => Deserialize::begin(&mut self.link),
88                "paypal" => Deserialize::begin(&mut self.paypal),
89                "payto" => Deserialize::begin(&mut self.payto),
90                "sepa_debit" => Deserialize::begin(&mut self.sepa_debit),
91                "upi" => Deserialize::begin(&mut self.upi),
92                "us_bank_account" => Deserialize::begin(&mut self.us_bank_account),
93                _ => <dyn Visitor>::ignore(),
94            })
95        }
96
97        fn deser_default() -> Self {
98            Self {
99                acss_debit: Deserialize::default(),
100                amazon_pay: Deserialize::default(),
101                bacs_debit: Deserialize::default(),
102                card: Deserialize::default(),
103                card_present: Deserialize::default(),
104                klarna: Deserialize::default(),
105                link: Deserialize::default(),
106                paypal: Deserialize::default(),
107                payto: Deserialize::default(),
108                sepa_debit: Deserialize::default(),
109                upi: Deserialize::default(),
110                us_bank_account: Deserialize::default(),
111            }
112        }
113
114        fn take_out(&mut self) -> Option<Self::Out> {
115            let (
116                Some(acss_debit),
117                Some(amazon_pay),
118                Some(bacs_debit),
119                Some(card),
120                Some(card_present),
121                Some(klarna),
122                Some(link),
123                Some(paypal),
124                Some(payto),
125                Some(sepa_debit),
126                Some(upi),
127                Some(us_bank_account),
128            ) = (
129                self.acss_debit.take(),
130                self.amazon_pay,
131                self.bacs_debit.take(),
132                self.card.take(),
133                self.card_present,
134                self.klarna.take(),
135                self.link.take(),
136                self.paypal.take(),
137                self.payto.take(),
138                self.sepa_debit.take(),
139                self.upi.take(),
140                self.us_bank_account.take(),
141            )
142            else {
143                return None;
144            };
145            Some(Self::Out {
146                acss_debit,
147                amazon_pay,
148                bacs_debit,
149                card,
150                card_present,
151                klarna,
152                link,
153                paypal,
154                payto,
155                sepa_debit,
156                upi,
157                us_bank_account,
158            })
159        }
160    }
161
162    impl Map for Builder<'_> {
163        fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
164            self.builder.key(k)
165        }
166
167        fn finish(&mut self) -> Result<()> {
168            *self.out = self.builder.take_out();
169            Ok(())
170        }
171    }
172
173    impl ObjectDeser for SetupIntentPaymentMethodOptions {
174        type Builder = SetupIntentPaymentMethodOptionsBuilder;
175    }
176
177    impl FromValueOpt for SetupIntentPaymentMethodOptions {
178        fn from_value(v: Value) -> Option<Self> {
179            let Value::Object(obj) = v else {
180                return None;
181            };
182            let mut b = SetupIntentPaymentMethodOptionsBuilder::deser_default();
183            for (k, v) in obj {
184                match k.as_str() {
185                    "acss_debit" => b.acss_debit = FromValueOpt::from_value(v),
186                    "amazon_pay" => b.amazon_pay = FromValueOpt::from_value(v),
187                    "bacs_debit" => b.bacs_debit = FromValueOpt::from_value(v),
188                    "card" => b.card = FromValueOpt::from_value(v),
189                    "card_present" => b.card_present = FromValueOpt::from_value(v),
190                    "klarna" => b.klarna = FromValueOpt::from_value(v),
191                    "link" => b.link = FromValueOpt::from_value(v),
192                    "paypal" => b.paypal = FromValueOpt::from_value(v),
193                    "payto" => b.payto = FromValueOpt::from_value(v),
194                    "sepa_debit" => b.sepa_debit = FromValueOpt::from_value(v),
195                    "upi" => b.upi = FromValueOpt::from_value(v),
196                    "us_bank_account" => b.us_bank_account = FromValueOpt::from_value(v),
197                    _ => {}
198                }
199            }
200            b.take_out()
201        }
202    }
203};