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