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<'a> Map for Builder<'a> {
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    CustomerBalance,
159    Eps,
160    Fpx,
161    Giropay,
162    Grabpay,
163    Ideal,
164    JpCreditTransfer,
165    KakaoPay,
166    Klarna,
167    Konbini,
168    KrCard,
169    Link,
170    Multibanco,
171    NaverPay,
172    NzBankAccount,
173    P24,
174    Payco,
175    Paynow,
176    Paypal,
177    Promptpay,
178    RevolutPay,
179    SepaCreditTransfer,
180    SepaDebit,
181    Sofort,
182    Swish,
183    UsBankAccount,
184    WechatPay,
185    /// An unrecognized value from Stripe. Should not be used as a request parameter.
186    Unknown(String),
187}
188impl SubscriptionsResourcePaymentSettingsPaymentMethodTypes {
189    pub fn as_str(&self) -> &str {
190        use SubscriptionsResourcePaymentSettingsPaymentMethodTypes::*;
191        match self {
192            AchCreditTransfer => "ach_credit_transfer",
193            AchDebit => "ach_debit",
194            AcssDebit => "acss_debit",
195            Affirm => "affirm",
196            AmazonPay => "amazon_pay",
197            AuBecsDebit => "au_becs_debit",
198            BacsDebit => "bacs_debit",
199            Bancontact => "bancontact",
200            Boleto => "boleto",
201            Card => "card",
202            Cashapp => "cashapp",
203            CustomerBalance => "customer_balance",
204            Eps => "eps",
205            Fpx => "fpx",
206            Giropay => "giropay",
207            Grabpay => "grabpay",
208            Ideal => "ideal",
209            JpCreditTransfer => "jp_credit_transfer",
210            KakaoPay => "kakao_pay",
211            Klarna => "klarna",
212            Konbini => "konbini",
213            KrCard => "kr_card",
214            Link => "link",
215            Multibanco => "multibanco",
216            NaverPay => "naver_pay",
217            NzBankAccount => "nz_bank_account",
218            P24 => "p24",
219            Payco => "payco",
220            Paynow => "paynow",
221            Paypal => "paypal",
222            Promptpay => "promptpay",
223            RevolutPay => "revolut_pay",
224            SepaCreditTransfer => "sepa_credit_transfer",
225            SepaDebit => "sepa_debit",
226            Sofort => "sofort",
227            Swish => "swish",
228            UsBankAccount => "us_bank_account",
229            WechatPay => "wechat_pay",
230            Unknown(v) => v,
231        }
232    }
233}
234
235impl std::str::FromStr for SubscriptionsResourcePaymentSettingsPaymentMethodTypes {
236    type Err = std::convert::Infallible;
237    fn from_str(s: &str) -> Result<Self, Self::Err> {
238        use SubscriptionsResourcePaymentSettingsPaymentMethodTypes::*;
239        match s {
240            "ach_credit_transfer" => Ok(AchCreditTransfer),
241            "ach_debit" => Ok(AchDebit),
242            "acss_debit" => Ok(AcssDebit),
243            "affirm" => Ok(Affirm),
244            "amazon_pay" => Ok(AmazonPay),
245            "au_becs_debit" => Ok(AuBecsDebit),
246            "bacs_debit" => Ok(BacsDebit),
247            "bancontact" => Ok(Bancontact),
248            "boleto" => Ok(Boleto),
249            "card" => Ok(Card),
250            "cashapp" => Ok(Cashapp),
251            "customer_balance" => Ok(CustomerBalance),
252            "eps" => Ok(Eps),
253            "fpx" => Ok(Fpx),
254            "giropay" => Ok(Giropay),
255            "grabpay" => Ok(Grabpay),
256            "ideal" => Ok(Ideal),
257            "jp_credit_transfer" => Ok(JpCreditTransfer),
258            "kakao_pay" => Ok(KakaoPay),
259            "klarna" => Ok(Klarna),
260            "konbini" => Ok(Konbini),
261            "kr_card" => Ok(KrCard),
262            "link" => Ok(Link),
263            "multibanco" => Ok(Multibanco),
264            "naver_pay" => Ok(NaverPay),
265            "nz_bank_account" => Ok(NzBankAccount),
266            "p24" => Ok(P24),
267            "payco" => Ok(Payco),
268            "paynow" => Ok(Paynow),
269            "paypal" => Ok(Paypal),
270            "promptpay" => Ok(Promptpay),
271            "revolut_pay" => Ok(RevolutPay),
272            "sepa_credit_transfer" => Ok(SepaCreditTransfer),
273            "sepa_debit" => Ok(SepaDebit),
274            "sofort" => Ok(Sofort),
275            "swish" => Ok(Swish),
276            "us_bank_account" => Ok(UsBankAccount),
277            "wechat_pay" => Ok(WechatPay),
278            v => Ok(Unknown(v.to_owned())),
279        }
280    }
281}
282impl std::fmt::Display for SubscriptionsResourcePaymentSettingsPaymentMethodTypes {
283    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
284        f.write_str(self.as_str())
285    }
286}
287
288impl std::fmt::Debug for SubscriptionsResourcePaymentSettingsPaymentMethodTypes {
289    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
290        f.write_str(self.as_str())
291    }
292}
293#[cfg(feature = "serialize")]
294impl serde::Serialize for SubscriptionsResourcePaymentSettingsPaymentMethodTypes {
295    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
296    where
297        S: serde::Serializer,
298    {
299        serializer.serialize_str(self.as_str())
300    }
301}
302impl miniserde::Deserialize for SubscriptionsResourcePaymentSettingsPaymentMethodTypes {
303    fn begin(out: &mut Option<Self>) -> &mut dyn miniserde::de::Visitor {
304        crate::Place::new(out)
305    }
306}
307
308impl miniserde::de::Visitor
309    for crate::Place<SubscriptionsResourcePaymentSettingsPaymentMethodTypes>
310{
311    fn string(&mut self, s: &str) -> miniserde::Result<()> {
312        use std::str::FromStr;
313        self.out =
314            Some(SubscriptionsResourcePaymentSettingsPaymentMethodTypes::from_str(s).unwrap());
315        Ok(())
316    }
317}
318
319stripe_types::impl_from_val_with_from_str!(SubscriptionsResourcePaymentSettingsPaymentMethodTypes);
320#[cfg(feature = "deserialize")]
321impl<'de> serde::Deserialize<'de> for SubscriptionsResourcePaymentSettingsPaymentMethodTypes {
322    fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
323        use std::str::FromStr;
324        let s: std::borrow::Cow<'de, str> = serde::Deserialize::deserialize(deserializer)?;
325        Ok(Self::from_str(&s).unwrap())
326    }
327}
328/// Configure whether Stripe updates `subscription.default_payment_method` when payment succeeds.
329/// Defaults to `off`.
330#[derive(Copy, Clone, Eq, PartialEq)]
331pub enum SubscriptionsResourcePaymentSettingsSaveDefaultPaymentMethod {
332    Off,
333    OnSubscription,
334}
335impl SubscriptionsResourcePaymentSettingsSaveDefaultPaymentMethod {
336    pub fn as_str(self) -> &'static str {
337        use SubscriptionsResourcePaymentSettingsSaveDefaultPaymentMethod::*;
338        match self {
339            Off => "off",
340            OnSubscription => "on_subscription",
341        }
342    }
343}
344
345impl std::str::FromStr for SubscriptionsResourcePaymentSettingsSaveDefaultPaymentMethod {
346    type Err = stripe_types::StripeParseError;
347    fn from_str(s: &str) -> Result<Self, Self::Err> {
348        use SubscriptionsResourcePaymentSettingsSaveDefaultPaymentMethod::*;
349        match s {
350            "off" => Ok(Off),
351            "on_subscription" => Ok(OnSubscription),
352            _ => Err(stripe_types::StripeParseError),
353        }
354    }
355}
356impl std::fmt::Display for SubscriptionsResourcePaymentSettingsSaveDefaultPaymentMethod {
357    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
358        f.write_str(self.as_str())
359    }
360}
361
362impl std::fmt::Debug for SubscriptionsResourcePaymentSettingsSaveDefaultPaymentMethod {
363    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
364        f.write_str(self.as_str())
365    }
366}
367#[cfg(feature = "serialize")]
368impl serde::Serialize for SubscriptionsResourcePaymentSettingsSaveDefaultPaymentMethod {
369    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
370    where
371        S: serde::Serializer,
372    {
373        serializer.serialize_str(self.as_str())
374    }
375}
376impl miniserde::Deserialize for SubscriptionsResourcePaymentSettingsSaveDefaultPaymentMethod {
377    fn begin(out: &mut Option<Self>) -> &mut dyn miniserde::de::Visitor {
378        crate::Place::new(out)
379    }
380}
381
382impl miniserde::de::Visitor
383    for crate::Place<SubscriptionsResourcePaymentSettingsSaveDefaultPaymentMethod>
384{
385    fn string(&mut self, s: &str) -> miniserde::Result<()> {
386        use std::str::FromStr;
387        self.out = Some(
388            SubscriptionsResourcePaymentSettingsSaveDefaultPaymentMethod::from_str(s)
389                .map_err(|_| miniserde::Error)?,
390        );
391        Ok(())
392    }
393}
394
395stripe_types::impl_from_val_with_from_str!(
396    SubscriptionsResourcePaymentSettingsSaveDefaultPaymentMethod
397);
398#[cfg(feature = "deserialize")]
399impl<'de> serde::Deserialize<'de> for SubscriptionsResourcePaymentSettingsSaveDefaultPaymentMethod {
400    fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
401        use std::str::FromStr;
402        let s: std::borrow::Cow<'de, str> = serde::Deserialize::deserialize(deserializer)?;
403        Self::from_str(&s).map_err(|_| {
404            serde::de::Error::custom(
405                "Unknown value for SubscriptionsResourcePaymentSettingsSaveDefaultPaymentMethod",
406            )
407        })
408    }
409}