stripe_shared/
payment_method.rs

1/// PaymentMethod objects represent your customer's payment instruments.
2/// You can use them with [PaymentIntents](https://stripe.com/docs/payments/payment-intents) to collect payments or save them to.
3/// Customer objects to store instrument details for future payments.
4///
5/// Related guides: [Payment Methods](https://stripe.com/docs/payments/payment-methods) and [More Payment Scenarios](https://stripe.com/docs/payments/more-payment-scenarios).
6///
7/// For more details see <<https://stripe.com/docs/api/payment_methods/object>>.
8#[derive(Clone, Debug)]
9#[cfg_attr(feature = "deserialize", derive(serde::Deserialize))]
10pub struct PaymentMethod {
11    pub acss_debit: Option<stripe_shared::PaymentMethodAcssDebit>,
12    pub affirm: Option<stripe_shared::PaymentMethodAffirm>,
13    pub afterpay_clearpay: Option<stripe_shared::PaymentMethodAfterpayClearpay>,
14    pub alipay: Option<stripe_shared::PaymentFlowsPrivatePaymentMethodsAlipay>,
15    /// This field indicates whether this payment method can be shown again to its customer in a checkout flow.
16    /// Stripe products such as Checkout and Elements use this field to determine whether a payment method can be shown as a saved payment method in a checkout flow.
17    /// The field defaults to “unspecified”.
18    pub allow_redisplay: Option<stripe_shared::PaymentMethodAllowRedisplay>,
19    pub alma: Option<stripe_shared::PaymentMethodAlma>,
20    pub amazon_pay: Option<stripe_shared::PaymentMethodAmazonPay>,
21    pub au_becs_debit: Option<stripe_shared::PaymentMethodAuBecsDebit>,
22    pub bacs_debit: Option<stripe_shared::PaymentMethodBacsDebit>,
23    pub bancontact: Option<stripe_shared::PaymentMethodBancontact>,
24    pub billie: Option<stripe_shared::PaymentMethodBillie>,
25    pub billing_details: stripe_shared::BillingDetails,
26    pub blik: Option<stripe_shared::PaymentMethodBlik>,
27    pub boleto: Option<stripe_shared::PaymentMethodBoleto>,
28    pub card: Option<stripe_shared::PaymentMethodCard>,
29    pub card_present: Option<stripe_shared::PaymentMethodCardPresent>,
30    pub cashapp: Option<stripe_shared::PaymentMethodCashapp>,
31    /// Time at which the object was created. Measured in seconds since the Unix epoch.
32    pub created: stripe_types::Timestamp,
33    pub crypto: Option<stripe_shared::PaymentMethodCrypto>,
34    pub custom: Option<stripe_shared::PaymentMethodCustom>,
35    /// The ID of the Customer to which this PaymentMethod is saved.
36    /// This will not be set when the PaymentMethod has not been saved to a Customer.
37    pub customer: Option<stripe_types::Expandable<stripe_shared::Customer>>,
38    pub customer_balance: Option<stripe_shared::PaymentMethodCustomerBalance>,
39    pub eps: Option<stripe_shared::PaymentMethodEps>,
40    pub fpx: Option<stripe_shared::PaymentMethodFpx>,
41    pub giropay: Option<stripe_shared::PaymentMethodGiropay>,
42    pub grabpay: Option<stripe_shared::PaymentMethodGrabpay>,
43    /// Unique identifier for the object.
44    pub id: stripe_shared::PaymentMethodId,
45    pub ideal: Option<stripe_shared::PaymentMethodIdeal>,
46    pub interac_present: Option<stripe_shared::PaymentMethodInteracPresent>,
47    pub kakao_pay: Option<stripe_shared::PaymentMethodKakaoPay>,
48    pub klarna: Option<stripe_shared::PaymentMethodKlarna>,
49    pub konbini: Option<stripe_shared::PaymentMethodKonbini>,
50    pub kr_card: Option<stripe_shared::PaymentMethodKrCard>,
51    pub link: Option<stripe_shared::PaymentMethodLink>,
52    /// Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode.
53    pub livemode: bool,
54    pub mb_way: Option<stripe_shared::PaymentMethodMbWay>,
55    /// Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object.
56    /// This can be useful for storing additional information about the object in a structured format.
57    pub metadata: Option<std::collections::HashMap<String, String>>,
58    pub mobilepay: Option<stripe_shared::PaymentMethodMobilepay>,
59    pub multibanco: Option<stripe_shared::PaymentMethodMultibanco>,
60    pub naver_pay: Option<stripe_shared::PaymentMethodNaverPay>,
61    pub nz_bank_account: Option<stripe_shared::PaymentMethodNzBankAccount>,
62    pub oxxo: Option<stripe_shared::PaymentMethodOxxo>,
63    pub p24: Option<stripe_shared::PaymentMethodP24>,
64    pub pay_by_bank: Option<stripe_shared::PaymentMethodPayByBank>,
65    pub payco: Option<stripe_shared::PaymentMethodPayco>,
66    pub paynow: Option<stripe_shared::PaymentMethodPaynow>,
67    pub paypal: Option<stripe_shared::PaymentMethodPaypal>,
68    pub pix: Option<stripe_shared::PaymentMethodPix>,
69    pub promptpay: Option<stripe_shared::PaymentMethodPromptpay>,
70    pub radar_options: Option<stripe_shared::RadarRadarOptions>,
71    pub revolut_pay: Option<stripe_shared::PaymentMethodRevolutPay>,
72    pub samsung_pay: Option<stripe_shared::PaymentMethodSamsungPay>,
73    pub satispay: Option<stripe_shared::PaymentMethodSatispay>,
74    pub sepa_debit: Option<stripe_shared::PaymentMethodSepaDebit>,
75    pub sofort: Option<stripe_shared::PaymentMethodSofort>,
76    pub swish: Option<stripe_shared::PaymentMethodSwish>,
77    pub twint: Option<stripe_shared::PaymentMethodTwint>,
78    /// The type of the PaymentMethod.
79    /// An additional hash is included on the PaymentMethod with a name matching this value.
80    /// It contains additional information specific to the PaymentMethod type.
81    #[cfg_attr(feature = "deserialize", serde(rename = "type"))]
82    pub type_: PaymentMethodType,
83    pub us_bank_account: Option<stripe_shared::PaymentMethodUsBankAccount>,
84    pub wechat_pay: Option<stripe_shared::PaymentMethodWechatPay>,
85    pub zip: Option<stripe_shared::PaymentMethodZip>,
86}
87#[doc(hidden)]
88pub struct PaymentMethodBuilder {
89    acss_debit: Option<Option<stripe_shared::PaymentMethodAcssDebit>>,
90    affirm: Option<Option<stripe_shared::PaymentMethodAffirm>>,
91    afterpay_clearpay: Option<Option<stripe_shared::PaymentMethodAfterpayClearpay>>,
92    alipay: Option<Option<stripe_shared::PaymentFlowsPrivatePaymentMethodsAlipay>>,
93    allow_redisplay: Option<Option<stripe_shared::PaymentMethodAllowRedisplay>>,
94    alma: Option<Option<stripe_shared::PaymentMethodAlma>>,
95    amazon_pay: Option<Option<stripe_shared::PaymentMethodAmazonPay>>,
96    au_becs_debit: Option<Option<stripe_shared::PaymentMethodAuBecsDebit>>,
97    bacs_debit: Option<Option<stripe_shared::PaymentMethodBacsDebit>>,
98    bancontact: Option<Option<stripe_shared::PaymentMethodBancontact>>,
99    billie: Option<Option<stripe_shared::PaymentMethodBillie>>,
100    billing_details: Option<stripe_shared::BillingDetails>,
101    blik: Option<Option<stripe_shared::PaymentMethodBlik>>,
102    boleto: Option<Option<stripe_shared::PaymentMethodBoleto>>,
103    card: Option<Option<stripe_shared::PaymentMethodCard>>,
104    card_present: Option<Option<stripe_shared::PaymentMethodCardPresent>>,
105    cashapp: Option<Option<stripe_shared::PaymentMethodCashapp>>,
106    created: Option<stripe_types::Timestamp>,
107    crypto: Option<Option<stripe_shared::PaymentMethodCrypto>>,
108    custom: Option<Option<stripe_shared::PaymentMethodCustom>>,
109    customer: Option<Option<stripe_types::Expandable<stripe_shared::Customer>>>,
110    customer_balance: Option<Option<stripe_shared::PaymentMethodCustomerBalance>>,
111    eps: Option<Option<stripe_shared::PaymentMethodEps>>,
112    fpx: Option<Option<stripe_shared::PaymentMethodFpx>>,
113    giropay: Option<Option<stripe_shared::PaymentMethodGiropay>>,
114    grabpay: Option<Option<stripe_shared::PaymentMethodGrabpay>>,
115    id: Option<stripe_shared::PaymentMethodId>,
116    ideal: Option<Option<stripe_shared::PaymentMethodIdeal>>,
117    interac_present: Option<Option<stripe_shared::PaymentMethodInteracPresent>>,
118    kakao_pay: Option<Option<stripe_shared::PaymentMethodKakaoPay>>,
119    klarna: Option<Option<stripe_shared::PaymentMethodKlarna>>,
120    konbini: Option<Option<stripe_shared::PaymentMethodKonbini>>,
121    kr_card: Option<Option<stripe_shared::PaymentMethodKrCard>>,
122    link: Option<Option<stripe_shared::PaymentMethodLink>>,
123    livemode: Option<bool>,
124    mb_way: Option<Option<stripe_shared::PaymentMethodMbWay>>,
125    metadata: Option<Option<std::collections::HashMap<String, String>>>,
126    mobilepay: Option<Option<stripe_shared::PaymentMethodMobilepay>>,
127    multibanco: Option<Option<stripe_shared::PaymentMethodMultibanco>>,
128    naver_pay: Option<Option<stripe_shared::PaymentMethodNaverPay>>,
129    nz_bank_account: Option<Option<stripe_shared::PaymentMethodNzBankAccount>>,
130    oxxo: Option<Option<stripe_shared::PaymentMethodOxxo>>,
131    p24: Option<Option<stripe_shared::PaymentMethodP24>>,
132    pay_by_bank: Option<Option<stripe_shared::PaymentMethodPayByBank>>,
133    payco: Option<Option<stripe_shared::PaymentMethodPayco>>,
134    paynow: Option<Option<stripe_shared::PaymentMethodPaynow>>,
135    paypal: Option<Option<stripe_shared::PaymentMethodPaypal>>,
136    pix: Option<Option<stripe_shared::PaymentMethodPix>>,
137    promptpay: Option<Option<stripe_shared::PaymentMethodPromptpay>>,
138    radar_options: Option<Option<stripe_shared::RadarRadarOptions>>,
139    revolut_pay: Option<Option<stripe_shared::PaymentMethodRevolutPay>>,
140    samsung_pay: Option<Option<stripe_shared::PaymentMethodSamsungPay>>,
141    satispay: Option<Option<stripe_shared::PaymentMethodSatispay>>,
142    sepa_debit: Option<Option<stripe_shared::PaymentMethodSepaDebit>>,
143    sofort: Option<Option<stripe_shared::PaymentMethodSofort>>,
144    swish: Option<Option<stripe_shared::PaymentMethodSwish>>,
145    twint: Option<Option<stripe_shared::PaymentMethodTwint>>,
146    type_: Option<PaymentMethodType>,
147    us_bank_account: Option<Option<stripe_shared::PaymentMethodUsBankAccount>>,
148    wechat_pay: Option<Option<stripe_shared::PaymentMethodWechatPay>>,
149    zip: Option<Option<stripe_shared::PaymentMethodZip>>,
150}
151
152#[allow(
153    unused_variables,
154    irrefutable_let_patterns,
155    clippy::let_unit_value,
156    clippy::match_single_binding,
157    clippy::single_match
158)]
159const _: () = {
160    use miniserde::de::{Map, Visitor};
161    use miniserde::json::Value;
162    use miniserde::{Deserialize, Result, make_place};
163    use stripe_types::miniserde_helpers::FromValueOpt;
164    use stripe_types::{MapBuilder, ObjectDeser};
165
166    make_place!(Place);
167
168    impl Deserialize for PaymentMethod {
169        fn begin(out: &mut Option<Self>) -> &mut dyn Visitor {
170            Place::new(out)
171        }
172    }
173
174    struct Builder<'a> {
175        out: &'a mut Option<PaymentMethod>,
176        builder: PaymentMethodBuilder,
177    }
178
179    impl Visitor for Place<PaymentMethod> {
180        fn map(&mut self) -> Result<Box<dyn Map + '_>> {
181            Ok(Box::new(Builder {
182                out: &mut self.out,
183                builder: PaymentMethodBuilder::deser_default(),
184            }))
185        }
186    }
187
188    impl MapBuilder for PaymentMethodBuilder {
189        type Out = PaymentMethod;
190        fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
191            Ok(match k {
192                "acss_debit" => Deserialize::begin(&mut self.acss_debit),
193                "affirm" => Deserialize::begin(&mut self.affirm),
194                "afterpay_clearpay" => Deserialize::begin(&mut self.afterpay_clearpay),
195                "alipay" => Deserialize::begin(&mut self.alipay),
196                "allow_redisplay" => Deserialize::begin(&mut self.allow_redisplay),
197                "alma" => Deserialize::begin(&mut self.alma),
198                "amazon_pay" => Deserialize::begin(&mut self.amazon_pay),
199                "au_becs_debit" => Deserialize::begin(&mut self.au_becs_debit),
200                "bacs_debit" => Deserialize::begin(&mut self.bacs_debit),
201                "bancontact" => Deserialize::begin(&mut self.bancontact),
202                "billie" => Deserialize::begin(&mut self.billie),
203                "billing_details" => Deserialize::begin(&mut self.billing_details),
204                "blik" => Deserialize::begin(&mut self.blik),
205                "boleto" => Deserialize::begin(&mut self.boleto),
206                "card" => Deserialize::begin(&mut self.card),
207                "card_present" => Deserialize::begin(&mut self.card_present),
208                "cashapp" => Deserialize::begin(&mut self.cashapp),
209                "created" => Deserialize::begin(&mut self.created),
210                "crypto" => Deserialize::begin(&mut self.crypto),
211                "custom" => Deserialize::begin(&mut self.custom),
212                "customer" => Deserialize::begin(&mut self.customer),
213                "customer_balance" => Deserialize::begin(&mut self.customer_balance),
214                "eps" => Deserialize::begin(&mut self.eps),
215                "fpx" => Deserialize::begin(&mut self.fpx),
216                "giropay" => Deserialize::begin(&mut self.giropay),
217                "grabpay" => Deserialize::begin(&mut self.grabpay),
218                "id" => Deserialize::begin(&mut self.id),
219                "ideal" => Deserialize::begin(&mut self.ideal),
220                "interac_present" => Deserialize::begin(&mut self.interac_present),
221                "kakao_pay" => Deserialize::begin(&mut self.kakao_pay),
222                "klarna" => Deserialize::begin(&mut self.klarna),
223                "konbini" => Deserialize::begin(&mut self.konbini),
224                "kr_card" => Deserialize::begin(&mut self.kr_card),
225                "link" => Deserialize::begin(&mut self.link),
226                "livemode" => Deserialize::begin(&mut self.livemode),
227                "mb_way" => Deserialize::begin(&mut self.mb_way),
228                "metadata" => Deserialize::begin(&mut self.metadata),
229                "mobilepay" => Deserialize::begin(&mut self.mobilepay),
230                "multibanco" => Deserialize::begin(&mut self.multibanco),
231                "naver_pay" => Deserialize::begin(&mut self.naver_pay),
232                "nz_bank_account" => Deserialize::begin(&mut self.nz_bank_account),
233                "oxxo" => Deserialize::begin(&mut self.oxxo),
234                "p24" => Deserialize::begin(&mut self.p24),
235                "pay_by_bank" => Deserialize::begin(&mut self.pay_by_bank),
236                "payco" => Deserialize::begin(&mut self.payco),
237                "paynow" => Deserialize::begin(&mut self.paynow),
238                "paypal" => Deserialize::begin(&mut self.paypal),
239                "pix" => Deserialize::begin(&mut self.pix),
240                "promptpay" => Deserialize::begin(&mut self.promptpay),
241                "radar_options" => Deserialize::begin(&mut self.radar_options),
242                "revolut_pay" => Deserialize::begin(&mut self.revolut_pay),
243                "samsung_pay" => Deserialize::begin(&mut self.samsung_pay),
244                "satispay" => Deserialize::begin(&mut self.satispay),
245                "sepa_debit" => Deserialize::begin(&mut self.sepa_debit),
246                "sofort" => Deserialize::begin(&mut self.sofort),
247                "swish" => Deserialize::begin(&mut self.swish),
248                "twint" => Deserialize::begin(&mut self.twint),
249                "type" => Deserialize::begin(&mut self.type_),
250                "us_bank_account" => Deserialize::begin(&mut self.us_bank_account),
251                "wechat_pay" => Deserialize::begin(&mut self.wechat_pay),
252                "zip" => Deserialize::begin(&mut self.zip),
253                _ => <dyn Visitor>::ignore(),
254            })
255        }
256
257        fn deser_default() -> Self {
258            Self {
259                acss_debit: Deserialize::default(),
260                affirm: Deserialize::default(),
261                afterpay_clearpay: Deserialize::default(),
262                alipay: Deserialize::default(),
263                allow_redisplay: Deserialize::default(),
264                alma: Deserialize::default(),
265                amazon_pay: Deserialize::default(),
266                au_becs_debit: Deserialize::default(),
267                bacs_debit: Deserialize::default(),
268                bancontact: Deserialize::default(),
269                billie: Deserialize::default(),
270                billing_details: Deserialize::default(),
271                blik: Deserialize::default(),
272                boleto: Deserialize::default(),
273                card: Deserialize::default(),
274                card_present: Deserialize::default(),
275                cashapp: Deserialize::default(),
276                created: Deserialize::default(),
277                crypto: Deserialize::default(),
278                custom: Deserialize::default(),
279                customer: Deserialize::default(),
280                customer_balance: Deserialize::default(),
281                eps: Deserialize::default(),
282                fpx: Deserialize::default(),
283                giropay: Deserialize::default(),
284                grabpay: Deserialize::default(),
285                id: Deserialize::default(),
286                ideal: Deserialize::default(),
287                interac_present: Deserialize::default(),
288                kakao_pay: Deserialize::default(),
289                klarna: Deserialize::default(),
290                konbini: Deserialize::default(),
291                kr_card: Deserialize::default(),
292                link: Deserialize::default(),
293                livemode: Deserialize::default(),
294                mb_way: Deserialize::default(),
295                metadata: Deserialize::default(),
296                mobilepay: Deserialize::default(),
297                multibanco: Deserialize::default(),
298                naver_pay: Deserialize::default(),
299                nz_bank_account: Deserialize::default(),
300                oxxo: Deserialize::default(),
301                p24: Deserialize::default(),
302                pay_by_bank: Deserialize::default(),
303                payco: Deserialize::default(),
304                paynow: Deserialize::default(),
305                paypal: Deserialize::default(),
306                pix: Deserialize::default(),
307                promptpay: Deserialize::default(),
308                radar_options: Deserialize::default(),
309                revolut_pay: Deserialize::default(),
310                samsung_pay: Deserialize::default(),
311                satispay: Deserialize::default(),
312                sepa_debit: Deserialize::default(),
313                sofort: Deserialize::default(),
314                swish: Deserialize::default(),
315                twint: Deserialize::default(),
316                type_: Deserialize::default(),
317                us_bank_account: Deserialize::default(),
318                wechat_pay: Deserialize::default(),
319                zip: Deserialize::default(),
320            }
321        }
322
323        fn take_out(&mut self) -> Option<Self::Out> {
324            let (
325                Some(acss_debit),
326                Some(affirm),
327                Some(afterpay_clearpay),
328                Some(alipay),
329                Some(allow_redisplay),
330                Some(alma),
331                Some(amazon_pay),
332                Some(au_becs_debit),
333                Some(bacs_debit),
334                Some(bancontact),
335                Some(billie),
336                Some(billing_details),
337                Some(blik),
338                Some(boleto),
339                Some(card),
340                Some(card_present),
341                Some(cashapp),
342                Some(created),
343                Some(crypto),
344                Some(custom),
345                Some(customer),
346                Some(customer_balance),
347                Some(eps),
348                Some(fpx),
349                Some(giropay),
350                Some(grabpay),
351                Some(id),
352                Some(ideal),
353                Some(interac_present),
354                Some(kakao_pay),
355                Some(klarna),
356                Some(konbini),
357                Some(kr_card),
358                Some(link),
359                Some(livemode),
360                Some(mb_way),
361                Some(metadata),
362                Some(mobilepay),
363                Some(multibanco),
364                Some(naver_pay),
365                Some(nz_bank_account),
366                Some(oxxo),
367                Some(p24),
368                Some(pay_by_bank),
369                Some(payco),
370                Some(paynow),
371                Some(paypal),
372                Some(pix),
373                Some(promptpay),
374                Some(radar_options),
375                Some(revolut_pay),
376                Some(samsung_pay),
377                Some(satispay),
378                Some(sepa_debit),
379                Some(sofort),
380                Some(swish),
381                Some(twint),
382                Some(type_),
383                Some(us_bank_account),
384                Some(wechat_pay),
385                Some(zip),
386            ) = (
387                self.acss_debit.take(),
388                self.affirm,
389                self.afterpay_clearpay,
390                self.alipay,
391                self.allow_redisplay,
392                self.alma,
393                self.amazon_pay,
394                self.au_becs_debit.take(),
395                self.bacs_debit.take(),
396                self.bancontact,
397                self.billie,
398                self.billing_details.take(),
399                self.blik,
400                self.boleto.take(),
401                self.card.take(),
402                self.card_present.take(),
403                self.cashapp.take(),
404                self.created,
405                self.crypto,
406                self.custom.take(),
407                self.customer.take(),
408                self.customer_balance,
409                self.eps.take(),
410                self.fpx.take(),
411                self.giropay,
412                self.grabpay,
413                self.id.take(),
414                self.ideal.take(),
415                self.interac_present.take(),
416                self.kakao_pay,
417                self.klarna,
418                self.konbini,
419                self.kr_card.take(),
420                self.link.take(),
421                self.livemode,
422                self.mb_way,
423                self.metadata.take(),
424                self.mobilepay,
425                self.multibanco,
426                self.naver_pay.take(),
427                self.nz_bank_account.take(),
428                self.oxxo,
429                self.p24.take(),
430                self.pay_by_bank,
431                self.payco,
432                self.paynow,
433                self.paypal.take(),
434                self.pix,
435                self.promptpay,
436                self.radar_options.take(),
437                self.revolut_pay,
438                self.samsung_pay,
439                self.satispay,
440                self.sepa_debit.take(),
441                self.sofort.take(),
442                self.swish,
443                self.twint,
444                self.type_.take(),
445                self.us_bank_account.take(),
446                self.wechat_pay,
447                self.zip,
448            )
449            else {
450                return None;
451            };
452            Some(Self::Out {
453                acss_debit,
454                affirm,
455                afterpay_clearpay,
456                alipay,
457                allow_redisplay,
458                alma,
459                amazon_pay,
460                au_becs_debit,
461                bacs_debit,
462                bancontact,
463                billie,
464                billing_details,
465                blik,
466                boleto,
467                card,
468                card_present,
469                cashapp,
470                created,
471                crypto,
472                custom,
473                customer,
474                customer_balance,
475                eps,
476                fpx,
477                giropay,
478                grabpay,
479                id,
480                ideal,
481                interac_present,
482                kakao_pay,
483                klarna,
484                konbini,
485                kr_card,
486                link,
487                livemode,
488                mb_way,
489                metadata,
490                mobilepay,
491                multibanco,
492                naver_pay,
493                nz_bank_account,
494                oxxo,
495                p24,
496                pay_by_bank,
497                payco,
498                paynow,
499                paypal,
500                pix,
501                promptpay,
502                radar_options,
503                revolut_pay,
504                samsung_pay,
505                satispay,
506                sepa_debit,
507                sofort,
508                swish,
509                twint,
510                type_,
511                us_bank_account,
512                wechat_pay,
513                zip,
514            })
515        }
516    }
517
518    impl Map for Builder<'_> {
519        fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
520            self.builder.key(k)
521        }
522
523        fn finish(&mut self) -> Result<()> {
524            *self.out = self.builder.take_out();
525            Ok(())
526        }
527    }
528
529    impl ObjectDeser for PaymentMethod {
530        type Builder = PaymentMethodBuilder;
531    }
532
533    impl FromValueOpt for PaymentMethod {
534        fn from_value(v: Value) -> Option<Self> {
535            let Value::Object(obj) = v else {
536                return None;
537            };
538            let mut b = PaymentMethodBuilder::deser_default();
539            for (k, v) in obj {
540                match k.as_str() {
541                    "acss_debit" => b.acss_debit = FromValueOpt::from_value(v),
542                    "affirm" => b.affirm = FromValueOpt::from_value(v),
543                    "afterpay_clearpay" => b.afterpay_clearpay = FromValueOpt::from_value(v),
544                    "alipay" => b.alipay = FromValueOpt::from_value(v),
545                    "allow_redisplay" => b.allow_redisplay = FromValueOpt::from_value(v),
546                    "alma" => b.alma = FromValueOpt::from_value(v),
547                    "amazon_pay" => b.amazon_pay = FromValueOpt::from_value(v),
548                    "au_becs_debit" => b.au_becs_debit = FromValueOpt::from_value(v),
549                    "bacs_debit" => b.bacs_debit = FromValueOpt::from_value(v),
550                    "bancontact" => b.bancontact = FromValueOpt::from_value(v),
551                    "billie" => b.billie = FromValueOpt::from_value(v),
552                    "billing_details" => b.billing_details = FromValueOpt::from_value(v),
553                    "blik" => b.blik = FromValueOpt::from_value(v),
554                    "boleto" => b.boleto = FromValueOpt::from_value(v),
555                    "card" => b.card = FromValueOpt::from_value(v),
556                    "card_present" => b.card_present = FromValueOpt::from_value(v),
557                    "cashapp" => b.cashapp = FromValueOpt::from_value(v),
558                    "created" => b.created = FromValueOpt::from_value(v),
559                    "crypto" => b.crypto = FromValueOpt::from_value(v),
560                    "custom" => b.custom = FromValueOpt::from_value(v),
561                    "customer" => b.customer = FromValueOpt::from_value(v),
562                    "customer_balance" => b.customer_balance = FromValueOpt::from_value(v),
563                    "eps" => b.eps = FromValueOpt::from_value(v),
564                    "fpx" => b.fpx = FromValueOpt::from_value(v),
565                    "giropay" => b.giropay = FromValueOpt::from_value(v),
566                    "grabpay" => b.grabpay = FromValueOpt::from_value(v),
567                    "id" => b.id = FromValueOpt::from_value(v),
568                    "ideal" => b.ideal = FromValueOpt::from_value(v),
569                    "interac_present" => b.interac_present = FromValueOpt::from_value(v),
570                    "kakao_pay" => b.kakao_pay = FromValueOpt::from_value(v),
571                    "klarna" => b.klarna = FromValueOpt::from_value(v),
572                    "konbini" => b.konbini = FromValueOpt::from_value(v),
573                    "kr_card" => b.kr_card = FromValueOpt::from_value(v),
574                    "link" => b.link = FromValueOpt::from_value(v),
575                    "livemode" => b.livemode = FromValueOpt::from_value(v),
576                    "mb_way" => b.mb_way = FromValueOpt::from_value(v),
577                    "metadata" => b.metadata = FromValueOpt::from_value(v),
578                    "mobilepay" => b.mobilepay = FromValueOpt::from_value(v),
579                    "multibanco" => b.multibanco = FromValueOpt::from_value(v),
580                    "naver_pay" => b.naver_pay = FromValueOpt::from_value(v),
581                    "nz_bank_account" => b.nz_bank_account = FromValueOpt::from_value(v),
582                    "oxxo" => b.oxxo = FromValueOpt::from_value(v),
583                    "p24" => b.p24 = FromValueOpt::from_value(v),
584                    "pay_by_bank" => b.pay_by_bank = FromValueOpt::from_value(v),
585                    "payco" => b.payco = FromValueOpt::from_value(v),
586                    "paynow" => b.paynow = FromValueOpt::from_value(v),
587                    "paypal" => b.paypal = FromValueOpt::from_value(v),
588                    "pix" => b.pix = FromValueOpt::from_value(v),
589                    "promptpay" => b.promptpay = FromValueOpt::from_value(v),
590                    "radar_options" => b.radar_options = FromValueOpt::from_value(v),
591                    "revolut_pay" => b.revolut_pay = FromValueOpt::from_value(v),
592                    "samsung_pay" => b.samsung_pay = FromValueOpt::from_value(v),
593                    "satispay" => b.satispay = FromValueOpt::from_value(v),
594                    "sepa_debit" => b.sepa_debit = FromValueOpt::from_value(v),
595                    "sofort" => b.sofort = FromValueOpt::from_value(v),
596                    "swish" => b.swish = FromValueOpt::from_value(v),
597                    "twint" => b.twint = FromValueOpt::from_value(v),
598                    "type" => b.type_ = FromValueOpt::from_value(v),
599                    "us_bank_account" => b.us_bank_account = FromValueOpt::from_value(v),
600                    "wechat_pay" => b.wechat_pay = FromValueOpt::from_value(v),
601                    "zip" => b.zip = FromValueOpt::from_value(v),
602                    _ => {}
603                }
604            }
605            b.take_out()
606        }
607    }
608};
609#[cfg(feature = "serialize")]
610impl serde::Serialize for PaymentMethod {
611    fn serialize<S: serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
612        use serde::ser::SerializeStruct;
613        let mut s = s.serialize_struct("PaymentMethod", 62)?;
614        s.serialize_field("acss_debit", &self.acss_debit)?;
615        s.serialize_field("affirm", &self.affirm)?;
616        s.serialize_field("afterpay_clearpay", &self.afterpay_clearpay)?;
617        s.serialize_field("alipay", &self.alipay)?;
618        s.serialize_field("allow_redisplay", &self.allow_redisplay)?;
619        s.serialize_field("alma", &self.alma)?;
620        s.serialize_field("amazon_pay", &self.amazon_pay)?;
621        s.serialize_field("au_becs_debit", &self.au_becs_debit)?;
622        s.serialize_field("bacs_debit", &self.bacs_debit)?;
623        s.serialize_field("bancontact", &self.bancontact)?;
624        s.serialize_field("billie", &self.billie)?;
625        s.serialize_field("billing_details", &self.billing_details)?;
626        s.serialize_field("blik", &self.blik)?;
627        s.serialize_field("boleto", &self.boleto)?;
628        s.serialize_field("card", &self.card)?;
629        s.serialize_field("card_present", &self.card_present)?;
630        s.serialize_field("cashapp", &self.cashapp)?;
631        s.serialize_field("created", &self.created)?;
632        s.serialize_field("crypto", &self.crypto)?;
633        s.serialize_field("custom", &self.custom)?;
634        s.serialize_field("customer", &self.customer)?;
635        s.serialize_field("customer_balance", &self.customer_balance)?;
636        s.serialize_field("eps", &self.eps)?;
637        s.serialize_field("fpx", &self.fpx)?;
638        s.serialize_field("giropay", &self.giropay)?;
639        s.serialize_field("grabpay", &self.grabpay)?;
640        s.serialize_field("id", &self.id)?;
641        s.serialize_field("ideal", &self.ideal)?;
642        s.serialize_field("interac_present", &self.interac_present)?;
643        s.serialize_field("kakao_pay", &self.kakao_pay)?;
644        s.serialize_field("klarna", &self.klarna)?;
645        s.serialize_field("konbini", &self.konbini)?;
646        s.serialize_field("kr_card", &self.kr_card)?;
647        s.serialize_field("link", &self.link)?;
648        s.serialize_field("livemode", &self.livemode)?;
649        s.serialize_field("mb_way", &self.mb_way)?;
650        s.serialize_field("metadata", &self.metadata)?;
651        s.serialize_field("mobilepay", &self.mobilepay)?;
652        s.serialize_field("multibanco", &self.multibanco)?;
653        s.serialize_field("naver_pay", &self.naver_pay)?;
654        s.serialize_field("nz_bank_account", &self.nz_bank_account)?;
655        s.serialize_field("oxxo", &self.oxxo)?;
656        s.serialize_field("p24", &self.p24)?;
657        s.serialize_field("pay_by_bank", &self.pay_by_bank)?;
658        s.serialize_field("payco", &self.payco)?;
659        s.serialize_field("paynow", &self.paynow)?;
660        s.serialize_field("paypal", &self.paypal)?;
661        s.serialize_field("pix", &self.pix)?;
662        s.serialize_field("promptpay", &self.promptpay)?;
663        s.serialize_field("radar_options", &self.radar_options)?;
664        s.serialize_field("revolut_pay", &self.revolut_pay)?;
665        s.serialize_field("samsung_pay", &self.samsung_pay)?;
666        s.serialize_field("satispay", &self.satispay)?;
667        s.serialize_field("sepa_debit", &self.sepa_debit)?;
668        s.serialize_field("sofort", &self.sofort)?;
669        s.serialize_field("swish", &self.swish)?;
670        s.serialize_field("twint", &self.twint)?;
671        s.serialize_field("type", &self.type_)?;
672        s.serialize_field("us_bank_account", &self.us_bank_account)?;
673        s.serialize_field("wechat_pay", &self.wechat_pay)?;
674        s.serialize_field("zip", &self.zip)?;
675
676        s.serialize_field("object", "payment_method")?;
677        s.end()
678    }
679}
680/// The type of the PaymentMethod.
681/// An additional hash is included on the PaymentMethod with a name matching this value.
682/// It contains additional information specific to the PaymentMethod type.
683#[derive(Clone, Eq, PartialEq)]
684#[non_exhaustive]
685pub enum PaymentMethodType {
686    AcssDebit,
687    Affirm,
688    AfterpayClearpay,
689    Alipay,
690    Alma,
691    AmazonPay,
692    AuBecsDebit,
693    BacsDebit,
694    Bancontact,
695    Billie,
696    Blik,
697    Boleto,
698    Card,
699    CardPresent,
700    Cashapp,
701    Crypto,
702    Custom,
703    CustomerBalance,
704    Eps,
705    Fpx,
706    Giropay,
707    Grabpay,
708    Ideal,
709    InteracPresent,
710    KakaoPay,
711    Klarna,
712    Konbini,
713    KrCard,
714    Link,
715    MbWay,
716    Mobilepay,
717    Multibanco,
718    NaverPay,
719    NzBankAccount,
720    Oxxo,
721    P24,
722    PayByBank,
723    Payco,
724    Paynow,
725    Paypal,
726    Pix,
727    Promptpay,
728    RevolutPay,
729    SamsungPay,
730    Satispay,
731    SepaDebit,
732    Sofort,
733    Swish,
734    Twint,
735    UsBankAccount,
736    WechatPay,
737    Zip,
738    /// An unrecognized value from Stripe. Should not be used as a request parameter.
739    Unknown(String),
740}
741impl PaymentMethodType {
742    pub fn as_str(&self) -> &str {
743        use PaymentMethodType::*;
744        match self {
745            AcssDebit => "acss_debit",
746            Affirm => "affirm",
747            AfterpayClearpay => "afterpay_clearpay",
748            Alipay => "alipay",
749            Alma => "alma",
750            AmazonPay => "amazon_pay",
751            AuBecsDebit => "au_becs_debit",
752            BacsDebit => "bacs_debit",
753            Bancontact => "bancontact",
754            Billie => "billie",
755            Blik => "blik",
756            Boleto => "boleto",
757            Card => "card",
758            CardPresent => "card_present",
759            Cashapp => "cashapp",
760            Crypto => "crypto",
761            Custom => "custom",
762            CustomerBalance => "customer_balance",
763            Eps => "eps",
764            Fpx => "fpx",
765            Giropay => "giropay",
766            Grabpay => "grabpay",
767            Ideal => "ideal",
768            InteracPresent => "interac_present",
769            KakaoPay => "kakao_pay",
770            Klarna => "klarna",
771            Konbini => "konbini",
772            KrCard => "kr_card",
773            Link => "link",
774            MbWay => "mb_way",
775            Mobilepay => "mobilepay",
776            Multibanco => "multibanco",
777            NaverPay => "naver_pay",
778            NzBankAccount => "nz_bank_account",
779            Oxxo => "oxxo",
780            P24 => "p24",
781            PayByBank => "pay_by_bank",
782            Payco => "payco",
783            Paynow => "paynow",
784            Paypal => "paypal",
785            Pix => "pix",
786            Promptpay => "promptpay",
787            RevolutPay => "revolut_pay",
788            SamsungPay => "samsung_pay",
789            Satispay => "satispay",
790            SepaDebit => "sepa_debit",
791            Sofort => "sofort",
792            Swish => "swish",
793            Twint => "twint",
794            UsBankAccount => "us_bank_account",
795            WechatPay => "wechat_pay",
796            Zip => "zip",
797            Unknown(v) => v,
798        }
799    }
800}
801
802impl std::str::FromStr for PaymentMethodType {
803    type Err = std::convert::Infallible;
804    fn from_str(s: &str) -> Result<Self, Self::Err> {
805        use PaymentMethodType::*;
806        match s {
807            "acss_debit" => Ok(AcssDebit),
808            "affirm" => Ok(Affirm),
809            "afterpay_clearpay" => Ok(AfterpayClearpay),
810            "alipay" => Ok(Alipay),
811            "alma" => Ok(Alma),
812            "amazon_pay" => Ok(AmazonPay),
813            "au_becs_debit" => Ok(AuBecsDebit),
814            "bacs_debit" => Ok(BacsDebit),
815            "bancontact" => Ok(Bancontact),
816            "billie" => Ok(Billie),
817            "blik" => Ok(Blik),
818            "boleto" => Ok(Boleto),
819            "card" => Ok(Card),
820            "card_present" => Ok(CardPresent),
821            "cashapp" => Ok(Cashapp),
822            "crypto" => Ok(Crypto),
823            "custom" => Ok(Custom),
824            "customer_balance" => Ok(CustomerBalance),
825            "eps" => Ok(Eps),
826            "fpx" => Ok(Fpx),
827            "giropay" => Ok(Giropay),
828            "grabpay" => Ok(Grabpay),
829            "ideal" => Ok(Ideal),
830            "interac_present" => Ok(InteracPresent),
831            "kakao_pay" => Ok(KakaoPay),
832            "klarna" => Ok(Klarna),
833            "konbini" => Ok(Konbini),
834            "kr_card" => Ok(KrCard),
835            "link" => Ok(Link),
836            "mb_way" => Ok(MbWay),
837            "mobilepay" => Ok(Mobilepay),
838            "multibanco" => Ok(Multibanco),
839            "naver_pay" => Ok(NaverPay),
840            "nz_bank_account" => Ok(NzBankAccount),
841            "oxxo" => Ok(Oxxo),
842            "p24" => Ok(P24),
843            "pay_by_bank" => Ok(PayByBank),
844            "payco" => Ok(Payco),
845            "paynow" => Ok(Paynow),
846            "paypal" => Ok(Paypal),
847            "pix" => Ok(Pix),
848            "promptpay" => Ok(Promptpay),
849            "revolut_pay" => Ok(RevolutPay),
850            "samsung_pay" => Ok(SamsungPay),
851            "satispay" => Ok(Satispay),
852            "sepa_debit" => Ok(SepaDebit),
853            "sofort" => Ok(Sofort),
854            "swish" => Ok(Swish),
855            "twint" => Ok(Twint),
856            "us_bank_account" => Ok(UsBankAccount),
857            "wechat_pay" => Ok(WechatPay),
858            "zip" => Ok(Zip),
859            v => Ok(Unknown(v.to_owned())),
860        }
861    }
862}
863impl std::fmt::Display for PaymentMethodType {
864    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
865        f.write_str(self.as_str())
866    }
867}
868
869impl std::fmt::Debug for PaymentMethodType {
870    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
871        f.write_str(self.as_str())
872    }
873}
874#[cfg(feature = "serialize")]
875impl serde::Serialize for PaymentMethodType {
876    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
877    where
878        S: serde::Serializer,
879    {
880        serializer.serialize_str(self.as_str())
881    }
882}
883impl miniserde::Deserialize for PaymentMethodType {
884    fn begin(out: &mut Option<Self>) -> &mut dyn miniserde::de::Visitor {
885        crate::Place::new(out)
886    }
887}
888
889impl miniserde::de::Visitor for crate::Place<PaymentMethodType> {
890    fn string(&mut self, s: &str) -> miniserde::Result<()> {
891        use std::str::FromStr;
892        self.out = Some(PaymentMethodType::from_str(s).unwrap());
893        Ok(())
894    }
895}
896
897stripe_types::impl_from_val_with_from_str!(PaymentMethodType);
898#[cfg(feature = "deserialize")]
899impl<'de> serde::Deserialize<'de> for PaymentMethodType {
900    fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
901        use std::str::FromStr;
902        let s: std::borrow::Cow<'de, str> = serde::Deserialize::deserialize(deserializer)?;
903        Ok(Self::from_str(&s).unwrap())
904    }
905}
906impl stripe_types::Object for PaymentMethod {
907    type Id = stripe_shared::PaymentMethodId;
908    fn id(&self) -> &Self::Id {
909        &self.id
910    }
911
912    fn into_id(self) -> Self::Id {
913        self.id
914    }
915}
916stripe_types::def_id!(PaymentMethodId);
917#[derive(Copy, Clone, Eq, PartialEq)]
918pub enum PaymentMethodAllowRedisplay {
919    Always,
920    Limited,
921    Unspecified,
922}
923impl PaymentMethodAllowRedisplay {
924    pub fn as_str(self) -> &'static str {
925        use PaymentMethodAllowRedisplay::*;
926        match self {
927            Always => "always",
928            Limited => "limited",
929            Unspecified => "unspecified",
930        }
931    }
932}
933
934impl std::str::FromStr for PaymentMethodAllowRedisplay {
935    type Err = stripe_types::StripeParseError;
936    fn from_str(s: &str) -> Result<Self, Self::Err> {
937        use PaymentMethodAllowRedisplay::*;
938        match s {
939            "always" => Ok(Always),
940            "limited" => Ok(Limited),
941            "unspecified" => Ok(Unspecified),
942            _ => Err(stripe_types::StripeParseError),
943        }
944    }
945}
946impl std::fmt::Display for PaymentMethodAllowRedisplay {
947    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
948        f.write_str(self.as_str())
949    }
950}
951
952impl std::fmt::Debug for PaymentMethodAllowRedisplay {
953    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
954        f.write_str(self.as_str())
955    }
956}
957impl serde::Serialize for PaymentMethodAllowRedisplay {
958    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
959    where
960        S: serde::Serializer,
961    {
962        serializer.serialize_str(self.as_str())
963    }
964}
965impl miniserde::Deserialize for PaymentMethodAllowRedisplay {
966    fn begin(out: &mut Option<Self>) -> &mut dyn miniserde::de::Visitor {
967        crate::Place::new(out)
968    }
969}
970
971impl miniserde::de::Visitor for crate::Place<PaymentMethodAllowRedisplay> {
972    fn string(&mut self, s: &str) -> miniserde::Result<()> {
973        use std::str::FromStr;
974        self.out = Some(PaymentMethodAllowRedisplay::from_str(s).map_err(|_| miniserde::Error)?);
975        Ok(())
976    }
977}
978
979stripe_types::impl_from_val_with_from_str!(PaymentMethodAllowRedisplay);
980#[cfg(feature = "deserialize")]
981impl<'de> serde::Deserialize<'de> for PaymentMethodAllowRedisplay {
982    fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
983        use std::str::FromStr;
984        let s: std::borrow::Cow<'de, str> = serde::Deserialize::deserialize(deserializer)?;
985        Self::from_str(&s)
986            .map_err(|_| serde::de::Error::custom("Unknown value for PaymentMethodAllowRedisplay"))
987    }
988}