stripe_shared/
payment_method.rs

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