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