stripe_shared/
subscriptions_resource_payment_settings.rs

1#[derive(Clone, Debug)]
2#[cfg_attr(feature = "serialize", derive(serde::Serialize))]
3#[cfg_attr(feature = "deserialize", derive(serde::Deserialize))]
4pub struct SubscriptionsResourcePaymentSettings {
5    /// Payment-method-specific configuration to provide to invoices created by the subscription.
6    pub payment_method_options: Option<stripe_shared::SubscriptionsResourcePaymentMethodOptions>,
7    /// The list of payment method types to provide to every invoice created by the subscription.
8    /// If not set, Stripe attempts to automatically determine the types to use by looking at the invoice’s default payment method, the subscription’s default payment method, the customer’s default payment method, and your [invoice template settings](https://dashboard.stripe.com/settings/billing/invoice).
9    pub payment_method_types: Option<Vec<SubscriptionsResourcePaymentSettingsPaymentMethodTypes>>,
10    /// Configure whether Stripe updates `subscription.default_payment_method` when payment succeeds.
11    /// Defaults to `off`.
12    pub save_default_payment_method:
13        Option<SubscriptionsResourcePaymentSettingsSaveDefaultPaymentMethod>,
14}
15#[doc(hidden)]
16pub struct SubscriptionsResourcePaymentSettingsBuilder {
17    payment_method_options:
18        Option<Option<stripe_shared::SubscriptionsResourcePaymentMethodOptions>>,
19    payment_method_types:
20        Option<Option<Vec<SubscriptionsResourcePaymentSettingsPaymentMethodTypes>>>,
21    save_default_payment_method:
22        Option<Option<SubscriptionsResourcePaymentSettingsSaveDefaultPaymentMethod>>,
23}
24
25#[allow(
26    unused_variables,
27    irrefutable_let_patterns,
28    clippy::let_unit_value,
29    clippy::match_single_binding,
30    clippy::single_match
31)]
32const _: () = {
33    use miniserde::de::{Map, Visitor};
34    use miniserde::json::Value;
35    use miniserde::{make_place, Deserialize, Result};
36    use stripe_types::miniserde_helpers::FromValueOpt;
37    use stripe_types::{MapBuilder, ObjectDeser};
38
39    make_place!(Place);
40
41    impl Deserialize for SubscriptionsResourcePaymentSettings {
42        fn begin(out: &mut Option<Self>) -> &mut dyn Visitor {
43            Place::new(out)
44        }
45    }
46
47    struct Builder<'a> {
48        out: &'a mut Option<SubscriptionsResourcePaymentSettings>,
49        builder: SubscriptionsResourcePaymentSettingsBuilder,
50    }
51
52    impl Visitor for Place<SubscriptionsResourcePaymentSettings> {
53        fn map(&mut self) -> Result<Box<dyn Map + '_>> {
54            Ok(Box::new(Builder {
55                out: &mut self.out,
56                builder: SubscriptionsResourcePaymentSettingsBuilder::deser_default(),
57            }))
58        }
59    }
60
61    impl MapBuilder for SubscriptionsResourcePaymentSettingsBuilder {
62        type Out = SubscriptionsResourcePaymentSettings;
63        fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
64            Ok(match k {
65                "payment_method_options" => Deserialize::begin(&mut self.payment_method_options),
66                "payment_method_types" => Deserialize::begin(&mut self.payment_method_types),
67                "save_default_payment_method" => {
68                    Deserialize::begin(&mut self.save_default_payment_method)
69                }
70
71                _ => <dyn Visitor>::ignore(),
72            })
73        }
74
75        fn deser_default() -> Self {
76            Self {
77                payment_method_options: Deserialize::default(),
78                payment_method_types: Deserialize::default(),
79                save_default_payment_method: Deserialize::default(),
80            }
81        }
82
83        fn take_out(&mut self) -> Option<Self::Out> {
84            let (
85                Some(payment_method_options),
86                Some(payment_method_types),
87                Some(save_default_payment_method),
88            ) = (
89                self.payment_method_options.take(),
90                self.payment_method_types.take(),
91                self.save_default_payment_method,
92            )
93            else {
94                return None;
95            };
96            Some(Self::Out {
97                payment_method_options,
98                payment_method_types,
99                save_default_payment_method,
100            })
101        }
102    }
103
104    impl Map for Builder<'_> {
105        fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
106            self.builder.key(k)
107        }
108
109        fn finish(&mut self) -> Result<()> {
110            *self.out = self.builder.take_out();
111            Ok(())
112        }
113    }
114
115    impl ObjectDeser for SubscriptionsResourcePaymentSettings {
116        type Builder = SubscriptionsResourcePaymentSettingsBuilder;
117    }
118
119    impl FromValueOpt for SubscriptionsResourcePaymentSettings {
120        fn from_value(v: Value) -> Option<Self> {
121            let Value::Object(obj) = v else {
122                return None;
123            };
124            let mut b = SubscriptionsResourcePaymentSettingsBuilder::deser_default();
125            for (k, v) in obj {
126                match k.as_str() {
127                    "payment_method_options" => {
128                        b.payment_method_options = FromValueOpt::from_value(v)
129                    }
130                    "payment_method_types" => b.payment_method_types = FromValueOpt::from_value(v),
131                    "save_default_payment_method" => {
132                        b.save_default_payment_method = FromValueOpt::from_value(v)
133                    }
134
135                    _ => {}
136                }
137            }
138            b.take_out()
139        }
140    }
141};
142/// The list of payment method types to provide to every invoice created by the subscription.
143/// If not set, Stripe attempts to automatically determine the types to use by looking at the invoice’s default payment method, the subscription’s default payment method, the customer’s default payment method, and your [invoice template settings](https://dashboard.stripe.com/settings/billing/invoice).
144#[derive(Clone, Eq, PartialEq)]
145#[non_exhaustive]
146pub enum SubscriptionsResourcePaymentSettingsPaymentMethodTypes {
147    AchCreditTransfer,
148    AchDebit,
149    AcssDebit,
150    Affirm,
151    AmazonPay,
152    AuBecsDebit,
153    BacsDebit,
154    Bancontact,
155    Boleto,
156    Card,
157    Cashapp,
158    Crypto,
159    CustomerBalance,
160    Eps,
161    Fpx,
162    Giropay,
163    Grabpay,
164    Ideal,
165    JpCreditTransfer,
166    KakaoPay,
167    Klarna,
168    Konbini,
169    KrCard,
170    Link,
171    Multibanco,
172    NaverPay,
173    NzBankAccount,
174    P24,
175    Payco,
176    Paynow,
177    Paypal,
178    Promptpay,
179    RevolutPay,
180    SepaCreditTransfer,
181    SepaDebit,
182    Sofort,
183    Swish,
184    UsBankAccount,
185    WechatPay,
186    /// An unrecognized value from Stripe. Should not be used as a request parameter.
187    Unknown(String),
188}
189impl SubscriptionsResourcePaymentSettingsPaymentMethodTypes {
190    pub fn as_str(&self) -> &str {
191        use SubscriptionsResourcePaymentSettingsPaymentMethodTypes::*;
192        match self {
193            AchCreditTransfer => "ach_credit_transfer",
194            AchDebit => "ach_debit",
195            AcssDebit => "acss_debit",
196            Affirm => "affirm",
197            AmazonPay => "amazon_pay",
198            AuBecsDebit => "au_becs_debit",
199            BacsDebit => "bacs_debit",
200            Bancontact => "bancontact",
201            Boleto => "boleto",
202            Card => "card",
203            Cashapp => "cashapp",
204            Crypto => "crypto",
205            CustomerBalance => "customer_balance",
206            Eps => "eps",
207            Fpx => "fpx",
208            Giropay => "giropay",
209            Grabpay => "grabpay",
210            Ideal => "ideal",
211            JpCreditTransfer => "jp_credit_transfer",
212            KakaoPay => "kakao_pay",
213            Klarna => "klarna",
214            Konbini => "konbini",
215            KrCard => "kr_card",
216            Link => "link",
217            Multibanco => "multibanco",
218            NaverPay => "naver_pay",
219            NzBankAccount => "nz_bank_account",
220            P24 => "p24",
221            Payco => "payco",
222            Paynow => "paynow",
223            Paypal => "paypal",
224            Promptpay => "promptpay",
225            RevolutPay => "revolut_pay",
226            SepaCreditTransfer => "sepa_credit_transfer",
227            SepaDebit => "sepa_debit",
228            Sofort => "sofort",
229            Swish => "swish",
230            UsBankAccount => "us_bank_account",
231            WechatPay => "wechat_pay",
232            Unknown(v) => v,
233        }
234    }
235}
236
237impl std::str::FromStr for SubscriptionsResourcePaymentSettingsPaymentMethodTypes {
238    type Err = std::convert::Infallible;
239    fn from_str(s: &str) -> Result<Self, Self::Err> {
240        use SubscriptionsResourcePaymentSettingsPaymentMethodTypes::*;
241        match s {
242            "ach_credit_transfer" => Ok(AchCreditTransfer),
243            "ach_debit" => Ok(AchDebit),
244            "acss_debit" => Ok(AcssDebit),
245            "affirm" => Ok(Affirm),
246            "amazon_pay" => Ok(AmazonPay),
247            "au_becs_debit" => Ok(AuBecsDebit),
248            "bacs_debit" => Ok(BacsDebit),
249            "bancontact" => Ok(Bancontact),
250            "boleto" => Ok(Boleto),
251            "card" => Ok(Card),
252            "cashapp" => Ok(Cashapp),
253            "crypto" => Ok(Crypto),
254            "customer_balance" => Ok(CustomerBalance),
255            "eps" => Ok(Eps),
256            "fpx" => Ok(Fpx),
257            "giropay" => Ok(Giropay),
258            "grabpay" => Ok(Grabpay),
259            "ideal" => Ok(Ideal),
260            "jp_credit_transfer" => Ok(JpCreditTransfer),
261            "kakao_pay" => Ok(KakaoPay),
262            "klarna" => Ok(Klarna),
263            "konbini" => Ok(Konbini),
264            "kr_card" => Ok(KrCard),
265            "link" => Ok(Link),
266            "multibanco" => Ok(Multibanco),
267            "naver_pay" => Ok(NaverPay),
268            "nz_bank_account" => Ok(NzBankAccount),
269            "p24" => Ok(P24),
270            "payco" => Ok(Payco),
271            "paynow" => Ok(Paynow),
272            "paypal" => Ok(Paypal),
273            "promptpay" => Ok(Promptpay),
274            "revolut_pay" => Ok(RevolutPay),
275            "sepa_credit_transfer" => Ok(SepaCreditTransfer),
276            "sepa_debit" => Ok(SepaDebit),
277            "sofort" => Ok(Sofort),
278            "swish" => Ok(Swish),
279            "us_bank_account" => Ok(UsBankAccount),
280            "wechat_pay" => Ok(WechatPay),
281            v => Ok(Unknown(v.to_owned())),
282        }
283    }
284}
285impl std::fmt::Display for SubscriptionsResourcePaymentSettingsPaymentMethodTypes {
286    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
287        f.write_str(self.as_str())
288    }
289}
290
291impl std::fmt::Debug for SubscriptionsResourcePaymentSettingsPaymentMethodTypes {
292    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
293        f.write_str(self.as_str())
294    }
295}
296#[cfg(feature = "serialize")]
297impl serde::Serialize for SubscriptionsResourcePaymentSettingsPaymentMethodTypes {
298    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
299    where
300        S: serde::Serializer,
301    {
302        serializer.serialize_str(self.as_str())
303    }
304}
305impl miniserde::Deserialize for SubscriptionsResourcePaymentSettingsPaymentMethodTypes {
306    fn begin(out: &mut Option<Self>) -> &mut dyn miniserde::de::Visitor {
307        crate::Place::new(out)
308    }
309}
310
311impl miniserde::de::Visitor
312    for crate::Place<SubscriptionsResourcePaymentSettingsPaymentMethodTypes>
313{
314    fn string(&mut self, s: &str) -> miniserde::Result<()> {
315        use std::str::FromStr;
316        self.out =
317            Some(SubscriptionsResourcePaymentSettingsPaymentMethodTypes::from_str(s).unwrap());
318        Ok(())
319    }
320}
321
322stripe_types::impl_from_val_with_from_str!(SubscriptionsResourcePaymentSettingsPaymentMethodTypes);
323#[cfg(feature = "deserialize")]
324impl<'de> serde::Deserialize<'de> for SubscriptionsResourcePaymentSettingsPaymentMethodTypes {
325    fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
326        use std::str::FromStr;
327        let s: std::borrow::Cow<'de, str> = serde::Deserialize::deserialize(deserializer)?;
328        Ok(Self::from_str(&s).unwrap())
329    }
330}
331/// Configure whether Stripe updates `subscription.default_payment_method` when payment succeeds.
332/// Defaults to `off`.
333#[derive(Copy, Clone, Eq, PartialEq)]
334pub enum SubscriptionsResourcePaymentSettingsSaveDefaultPaymentMethod {
335    Off,
336    OnSubscription,
337}
338impl SubscriptionsResourcePaymentSettingsSaveDefaultPaymentMethod {
339    pub fn as_str(self) -> &'static str {
340        use SubscriptionsResourcePaymentSettingsSaveDefaultPaymentMethod::*;
341        match self {
342            Off => "off",
343            OnSubscription => "on_subscription",
344        }
345    }
346}
347
348impl std::str::FromStr for SubscriptionsResourcePaymentSettingsSaveDefaultPaymentMethod {
349    type Err = stripe_types::StripeParseError;
350    fn from_str(s: &str) -> Result<Self, Self::Err> {
351        use SubscriptionsResourcePaymentSettingsSaveDefaultPaymentMethod::*;
352        match s {
353            "off" => Ok(Off),
354            "on_subscription" => Ok(OnSubscription),
355            _ => Err(stripe_types::StripeParseError),
356        }
357    }
358}
359impl std::fmt::Display for SubscriptionsResourcePaymentSettingsSaveDefaultPaymentMethod {
360    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
361        f.write_str(self.as_str())
362    }
363}
364
365impl std::fmt::Debug for SubscriptionsResourcePaymentSettingsSaveDefaultPaymentMethod {
366    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
367        f.write_str(self.as_str())
368    }
369}
370#[cfg(feature = "serialize")]
371impl serde::Serialize for SubscriptionsResourcePaymentSettingsSaveDefaultPaymentMethod {
372    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
373    where
374        S: serde::Serializer,
375    {
376        serializer.serialize_str(self.as_str())
377    }
378}
379impl miniserde::Deserialize for SubscriptionsResourcePaymentSettingsSaveDefaultPaymentMethod {
380    fn begin(out: &mut Option<Self>) -> &mut dyn miniserde::de::Visitor {
381        crate::Place::new(out)
382    }
383}
384
385impl miniserde::de::Visitor
386    for crate::Place<SubscriptionsResourcePaymentSettingsSaveDefaultPaymentMethod>
387{
388    fn string(&mut self, s: &str) -> miniserde::Result<()> {
389        use std::str::FromStr;
390        self.out = Some(
391            SubscriptionsResourcePaymentSettingsSaveDefaultPaymentMethod::from_str(s)
392                .map_err(|_| miniserde::Error)?,
393        );
394        Ok(())
395    }
396}
397
398stripe_types::impl_from_val_with_from_str!(
399    SubscriptionsResourcePaymentSettingsSaveDefaultPaymentMethod
400);
401#[cfg(feature = "deserialize")]
402impl<'de> serde::Deserialize<'de> for SubscriptionsResourcePaymentSettingsSaveDefaultPaymentMethod {
403    fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
404        use std::str::FromStr;
405        let s: std::borrow::Cow<'de, str> = serde::Deserialize::deserialize(deserializer)?;
406        Self::from_str(&s).map_err(|_| {
407            serde::de::Error::custom(
408                "Unknown value for SubscriptionsResourcePaymentSettingsSaveDefaultPaymentMethod",
409            )
410        })
411    }
412}