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