stripe_shared/
setup_intent_payment_method_options.rs

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