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