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