1#[derive(Clone, Debug)]
2#[cfg_attr(feature = "serialize", derive(serde::Serialize))]
3#[cfg_attr(feature = "deserialize", derive(serde::Deserialize))]
4pub struct MandatePaymentMethodDetails {
5 pub acss_debit: Option<stripe_shared::MandateAcssDebit>,
6 pub amazon_pay: Option<stripe_shared::MandateAmazonPay>,
7 pub au_becs_debit: Option<stripe_shared::MandateAuBecsDebit>,
8 pub bacs_debit: Option<stripe_shared::MandateBacsDebit>,
9 pub card: Option<stripe_shared::CardMandatePaymentMethodDetails>,
10 pub cashapp: Option<stripe_shared::MandateCashapp>,
11 pub kakao_pay: Option<stripe_shared::MandateKakaoPay>,
12 pub klarna: Option<stripe_shared::MandateKlarna>,
13 pub kr_card: Option<stripe_shared::MandateKrCard>,
14 pub link: Option<stripe_shared::MandateLink>,
15 pub naver_pay: Option<stripe_shared::MandateNaverPay>,
16 pub nz_bank_account: Option<stripe_shared::MandateNzBankAccount>,
17 pub paypal: Option<stripe_shared::MandatePaypal>,
18 pub payto: Option<stripe_shared::MandatePayto>,
19 pub revolut_pay: Option<stripe_shared::MandateRevolutPay>,
20 pub sepa_debit: Option<stripe_shared::MandateSepaDebit>,
21 #[cfg_attr(any(feature = "deserialize", feature = "serialize"), serde(rename = "type"))]
24 pub type_: String,
25 pub us_bank_account: Option<stripe_shared::MandateUsBankAccount>,
26}
27#[doc(hidden)]
28pub struct MandatePaymentMethodDetailsBuilder {
29 acss_debit: Option<Option<stripe_shared::MandateAcssDebit>>,
30 amazon_pay: Option<Option<stripe_shared::MandateAmazonPay>>,
31 au_becs_debit: Option<Option<stripe_shared::MandateAuBecsDebit>>,
32 bacs_debit: Option<Option<stripe_shared::MandateBacsDebit>>,
33 card: Option<Option<stripe_shared::CardMandatePaymentMethodDetails>>,
34 cashapp: Option<Option<stripe_shared::MandateCashapp>>,
35 kakao_pay: Option<Option<stripe_shared::MandateKakaoPay>>,
36 klarna: Option<Option<stripe_shared::MandateKlarna>>,
37 kr_card: Option<Option<stripe_shared::MandateKrCard>>,
38 link: Option<Option<stripe_shared::MandateLink>>,
39 naver_pay: Option<Option<stripe_shared::MandateNaverPay>>,
40 nz_bank_account: Option<Option<stripe_shared::MandateNzBankAccount>>,
41 paypal: Option<Option<stripe_shared::MandatePaypal>>,
42 payto: Option<Option<stripe_shared::MandatePayto>>,
43 revolut_pay: Option<Option<stripe_shared::MandateRevolutPay>>,
44 sepa_debit: Option<Option<stripe_shared::MandateSepaDebit>>,
45 type_: Option<String>,
46 us_bank_account: Option<Option<stripe_shared::MandateUsBankAccount>>,
47}
48
49#[allow(
50 unused_variables,
51 irrefutable_let_patterns,
52 clippy::let_unit_value,
53 clippy::match_single_binding,
54 clippy::single_match
55)]
56const _: () = {
57 use miniserde::de::{Map, Visitor};
58 use miniserde::json::Value;
59 use miniserde::{Deserialize, Result, make_place};
60 use stripe_types::miniserde_helpers::FromValueOpt;
61 use stripe_types::{MapBuilder, ObjectDeser};
62
63 make_place!(Place);
64
65 impl Deserialize for MandatePaymentMethodDetails {
66 fn begin(out: &mut Option<Self>) -> &mut dyn Visitor {
67 Place::new(out)
68 }
69 }
70
71 struct Builder<'a> {
72 out: &'a mut Option<MandatePaymentMethodDetails>,
73 builder: MandatePaymentMethodDetailsBuilder,
74 }
75
76 impl Visitor for Place<MandatePaymentMethodDetails> {
77 fn map(&mut self) -> Result<Box<dyn Map + '_>> {
78 Ok(Box::new(Builder {
79 out: &mut self.out,
80 builder: MandatePaymentMethodDetailsBuilder::deser_default(),
81 }))
82 }
83 }
84
85 impl MapBuilder for MandatePaymentMethodDetailsBuilder {
86 type Out = MandatePaymentMethodDetails;
87 fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
88 Ok(match k {
89 "acss_debit" => Deserialize::begin(&mut self.acss_debit),
90 "amazon_pay" => Deserialize::begin(&mut self.amazon_pay),
91 "au_becs_debit" => Deserialize::begin(&mut self.au_becs_debit),
92 "bacs_debit" => Deserialize::begin(&mut self.bacs_debit),
93 "card" => Deserialize::begin(&mut self.card),
94 "cashapp" => Deserialize::begin(&mut self.cashapp),
95 "kakao_pay" => Deserialize::begin(&mut self.kakao_pay),
96 "klarna" => Deserialize::begin(&mut self.klarna),
97 "kr_card" => Deserialize::begin(&mut self.kr_card),
98 "link" => Deserialize::begin(&mut self.link),
99 "naver_pay" => Deserialize::begin(&mut self.naver_pay),
100 "nz_bank_account" => Deserialize::begin(&mut self.nz_bank_account),
101 "paypal" => Deserialize::begin(&mut self.paypal),
102 "payto" => Deserialize::begin(&mut self.payto),
103 "revolut_pay" => Deserialize::begin(&mut self.revolut_pay),
104 "sepa_debit" => Deserialize::begin(&mut self.sepa_debit),
105 "type" => Deserialize::begin(&mut self.type_),
106 "us_bank_account" => Deserialize::begin(&mut self.us_bank_account),
107 _ => <dyn Visitor>::ignore(),
108 })
109 }
110
111 fn deser_default() -> Self {
112 Self {
113 acss_debit: Deserialize::default(),
114 amazon_pay: Deserialize::default(),
115 au_becs_debit: Deserialize::default(),
116 bacs_debit: Deserialize::default(),
117 card: Deserialize::default(),
118 cashapp: Deserialize::default(),
119 kakao_pay: Deserialize::default(),
120 klarna: Deserialize::default(),
121 kr_card: Deserialize::default(),
122 link: Deserialize::default(),
123 naver_pay: Deserialize::default(),
124 nz_bank_account: Deserialize::default(),
125 paypal: Deserialize::default(),
126 payto: Deserialize::default(),
127 revolut_pay: Deserialize::default(),
128 sepa_debit: Deserialize::default(),
129 type_: Deserialize::default(),
130 us_bank_account: Deserialize::default(),
131 }
132 }
133
134 fn take_out(&mut self) -> Option<Self::Out> {
135 let (
136 Some(acss_debit),
137 Some(amazon_pay),
138 Some(au_becs_debit),
139 Some(bacs_debit),
140 Some(card),
141 Some(cashapp),
142 Some(kakao_pay),
143 Some(klarna),
144 Some(kr_card),
145 Some(link),
146 Some(naver_pay),
147 Some(nz_bank_account),
148 Some(paypal),
149 Some(payto),
150 Some(revolut_pay),
151 Some(sepa_debit),
152 Some(type_),
153 Some(us_bank_account),
154 ) = (
155 self.acss_debit.take(),
156 self.amazon_pay,
157 self.au_becs_debit.take(),
158 self.bacs_debit.take(),
159 self.card,
160 self.cashapp,
161 self.kakao_pay,
162 self.klarna,
163 self.kr_card,
164 self.link,
165 self.naver_pay,
166 self.nz_bank_account,
167 self.paypal.take(),
168 self.payto.take(),
169 self.revolut_pay,
170 self.sepa_debit.take(),
171 self.type_.take(),
172 self.us_bank_account.take(),
173 )
174 else {
175 return None;
176 };
177 Some(Self::Out {
178 acss_debit,
179 amazon_pay,
180 au_becs_debit,
181 bacs_debit,
182 card,
183 cashapp,
184 kakao_pay,
185 klarna,
186 kr_card,
187 link,
188 naver_pay,
189 nz_bank_account,
190 paypal,
191 payto,
192 revolut_pay,
193 sepa_debit,
194 type_,
195 us_bank_account,
196 })
197 }
198 }
199
200 impl Map for Builder<'_> {
201 fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
202 self.builder.key(k)
203 }
204
205 fn finish(&mut self) -> Result<()> {
206 *self.out = self.builder.take_out();
207 Ok(())
208 }
209 }
210
211 impl ObjectDeser for MandatePaymentMethodDetails {
212 type Builder = MandatePaymentMethodDetailsBuilder;
213 }
214
215 impl FromValueOpt for MandatePaymentMethodDetails {
216 fn from_value(v: Value) -> Option<Self> {
217 let Value::Object(obj) = v else {
218 return None;
219 };
220 let mut b = MandatePaymentMethodDetailsBuilder::deser_default();
221 for (k, v) in obj {
222 match k.as_str() {
223 "acss_debit" => b.acss_debit = FromValueOpt::from_value(v),
224 "amazon_pay" => b.amazon_pay = FromValueOpt::from_value(v),
225 "au_becs_debit" => b.au_becs_debit = FromValueOpt::from_value(v),
226 "bacs_debit" => b.bacs_debit = FromValueOpt::from_value(v),
227 "card" => b.card = FromValueOpt::from_value(v),
228 "cashapp" => b.cashapp = FromValueOpt::from_value(v),
229 "kakao_pay" => b.kakao_pay = FromValueOpt::from_value(v),
230 "klarna" => b.klarna = FromValueOpt::from_value(v),
231 "kr_card" => b.kr_card = FromValueOpt::from_value(v),
232 "link" => b.link = FromValueOpt::from_value(v),
233 "naver_pay" => b.naver_pay = FromValueOpt::from_value(v),
234 "nz_bank_account" => b.nz_bank_account = FromValueOpt::from_value(v),
235 "paypal" => b.paypal = FromValueOpt::from_value(v),
236 "payto" => b.payto = FromValueOpt::from_value(v),
237 "revolut_pay" => b.revolut_pay = FromValueOpt::from_value(v),
238 "sepa_debit" => b.sepa_debit = FromValueOpt::from_value(v),
239 "type" => b.type_ = FromValueOpt::from_value(v),
240 "us_bank_account" => b.us_bank_account = FromValueOpt::from_value(v),
241 _ => {}
242 }
243 }
244 b.take_out()
245 }
246 }
247};