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