Skip to main content

stripe_shared/
payment_method.rs

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