Skip to main content

stripe_shared/
payment_intent_payment_method_options_mandate_options_acss_debit.rs

1#[derive(Clone, Eq, PartialEq)]
2#[cfg_attr(not(feature = "redact-generated-debug"), derive(Debug))]
3#[cfg_attr(feature = "serialize", derive(serde::Serialize))]
4#[cfg_attr(feature = "deserialize", derive(serde::Deserialize))]
5pub struct PaymentIntentPaymentMethodOptionsMandateOptionsAcssDebit {
6    /// A URL for custom mandate text
7    pub custom_mandate_url: Option<String>,
8    /// Description of the interval.
9    /// Only required if the 'payment_schedule' parameter is 'interval' or 'combined'.
10    pub interval_description: Option<String>,
11    /// Payment schedule for the mandate.
12    pub payment_schedule:
13        Option<PaymentIntentPaymentMethodOptionsMandateOptionsAcssDebitPaymentSchedule>,
14    /// Transaction type of the mandate.
15    pub transaction_type:
16        Option<PaymentIntentPaymentMethodOptionsMandateOptionsAcssDebitTransactionType>,
17}
18#[cfg(feature = "redact-generated-debug")]
19impl std::fmt::Debug for PaymentIntentPaymentMethodOptionsMandateOptionsAcssDebit {
20    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
21        f.debug_struct("PaymentIntentPaymentMethodOptionsMandateOptionsAcssDebit")
22            .finish_non_exhaustive()
23    }
24}
25#[doc(hidden)]
26pub struct PaymentIntentPaymentMethodOptionsMandateOptionsAcssDebitBuilder {
27    custom_mandate_url: Option<Option<String>>,
28    interval_description: Option<Option<String>>,
29    payment_schedule:
30        Option<Option<PaymentIntentPaymentMethodOptionsMandateOptionsAcssDebitPaymentSchedule>>,
31    transaction_type:
32        Option<Option<PaymentIntentPaymentMethodOptionsMandateOptionsAcssDebitTransactionType>>,
33}
34
35#[allow(
36    unused_variables,
37    irrefutable_let_patterns,
38    clippy::let_unit_value,
39    clippy::match_single_binding,
40    clippy::single_match
41)]
42const _: () = {
43    use miniserde::de::{Map, Visitor};
44    use miniserde::json::Value;
45    use miniserde::{Deserialize, Result, make_place};
46    use stripe_types::miniserde_helpers::FromValueOpt;
47    use stripe_types::{MapBuilder, ObjectDeser};
48
49    make_place!(Place);
50
51    impl Deserialize for PaymentIntentPaymentMethodOptionsMandateOptionsAcssDebit {
52        fn begin(out: &mut Option<Self>) -> &mut dyn Visitor {
53            Place::new(out)
54        }
55    }
56
57    struct Builder<'a> {
58        out: &'a mut Option<PaymentIntentPaymentMethodOptionsMandateOptionsAcssDebit>,
59        builder: PaymentIntentPaymentMethodOptionsMandateOptionsAcssDebitBuilder,
60    }
61
62    impl Visitor for Place<PaymentIntentPaymentMethodOptionsMandateOptionsAcssDebit> {
63        fn map(&mut self) -> Result<Box<dyn Map + '_>> {
64            Ok(Box::new(Builder {
65                out: &mut self.out,
66                builder:
67                    PaymentIntentPaymentMethodOptionsMandateOptionsAcssDebitBuilder::deser_default(),
68            }))
69        }
70    }
71
72    impl MapBuilder for PaymentIntentPaymentMethodOptionsMandateOptionsAcssDebitBuilder {
73        type Out = PaymentIntentPaymentMethodOptionsMandateOptionsAcssDebit;
74        fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
75            Ok(match k {
76                "custom_mandate_url" => Deserialize::begin(&mut self.custom_mandate_url),
77                "interval_description" => Deserialize::begin(&mut self.interval_description),
78                "payment_schedule" => Deserialize::begin(&mut self.payment_schedule),
79                "transaction_type" => Deserialize::begin(&mut self.transaction_type),
80                _ => <dyn Visitor>::ignore(),
81            })
82        }
83
84        fn deser_default() -> Self {
85            Self {
86                custom_mandate_url: Some(None),
87                interval_description: Some(None),
88                payment_schedule: Some(None),
89                transaction_type: Some(None),
90            }
91        }
92
93        fn take_out(&mut self) -> Option<Self::Out> {
94            let (
95                Some(custom_mandate_url),
96                Some(interval_description),
97                Some(payment_schedule),
98                Some(transaction_type),
99            ) = (
100                self.custom_mandate_url.take(),
101                self.interval_description.take(),
102                self.payment_schedule.take(),
103                self.transaction_type.take(),
104            )
105            else {
106                return None;
107            };
108            Some(Self::Out {
109                custom_mandate_url,
110                interval_description,
111                payment_schedule,
112                transaction_type,
113            })
114        }
115    }
116
117    impl Map for Builder<'_> {
118        fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
119            self.builder.key(k)
120        }
121
122        fn finish(&mut self) -> Result<()> {
123            *self.out = self.builder.take_out();
124            Ok(())
125        }
126    }
127
128    impl ObjectDeser for PaymentIntentPaymentMethodOptionsMandateOptionsAcssDebit {
129        type Builder = PaymentIntentPaymentMethodOptionsMandateOptionsAcssDebitBuilder;
130    }
131
132    impl FromValueOpt for PaymentIntentPaymentMethodOptionsMandateOptionsAcssDebit {
133        fn from_value(v: Value) -> Option<Self> {
134            let Value::Object(obj) = v else {
135                return None;
136            };
137            let mut b =
138                PaymentIntentPaymentMethodOptionsMandateOptionsAcssDebitBuilder::deser_default();
139            for (k, v) in obj {
140                match k.as_str() {
141                    "custom_mandate_url" => b.custom_mandate_url = FromValueOpt::from_value(v),
142                    "interval_description" => b.interval_description = FromValueOpt::from_value(v),
143                    "payment_schedule" => b.payment_schedule = FromValueOpt::from_value(v),
144                    "transaction_type" => b.transaction_type = FromValueOpt::from_value(v),
145                    _ => {}
146                }
147            }
148            b.take_out()
149        }
150    }
151};
152/// Payment schedule for the mandate.
153#[derive(Clone, Eq, PartialEq)]
154#[non_exhaustive]
155pub enum PaymentIntentPaymentMethodOptionsMandateOptionsAcssDebitPaymentSchedule {
156    Combined,
157    Interval,
158    Sporadic,
159    /// An unrecognized value from Stripe. Should not be used as a request parameter.
160    Unknown(String),
161}
162impl PaymentIntentPaymentMethodOptionsMandateOptionsAcssDebitPaymentSchedule {
163    pub fn as_str(&self) -> &str {
164        use PaymentIntentPaymentMethodOptionsMandateOptionsAcssDebitPaymentSchedule::*;
165        match self {
166            Combined => "combined",
167            Interval => "interval",
168            Sporadic => "sporadic",
169            Unknown(v) => v,
170        }
171    }
172}
173
174impl std::str::FromStr for PaymentIntentPaymentMethodOptionsMandateOptionsAcssDebitPaymentSchedule {
175    type Err = std::convert::Infallible;
176    fn from_str(s: &str) -> Result<Self, Self::Err> {
177        use PaymentIntentPaymentMethodOptionsMandateOptionsAcssDebitPaymentSchedule::*;
178        match s {
179            "combined" => Ok(Combined),
180            "interval" => Ok(Interval),
181            "sporadic" => Ok(Sporadic),
182            v => {
183                tracing::warn!(
184                    "Unknown value '{}' for enum '{}'",
185                    v,
186                    "PaymentIntentPaymentMethodOptionsMandateOptionsAcssDebitPaymentSchedule"
187                );
188                Ok(Unknown(v.to_owned()))
189            }
190        }
191    }
192}
193impl std::fmt::Display for PaymentIntentPaymentMethodOptionsMandateOptionsAcssDebitPaymentSchedule {
194    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
195        f.write_str(self.as_str())
196    }
197}
198
199#[cfg(not(feature = "redact-generated-debug"))]
200impl std::fmt::Debug for PaymentIntentPaymentMethodOptionsMandateOptionsAcssDebitPaymentSchedule {
201    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
202        f.write_str(self.as_str())
203    }
204}
205#[cfg(feature = "redact-generated-debug")]
206impl std::fmt::Debug for PaymentIntentPaymentMethodOptionsMandateOptionsAcssDebitPaymentSchedule {
207    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
208        f.debug_struct(stringify!(
209            PaymentIntentPaymentMethodOptionsMandateOptionsAcssDebitPaymentSchedule
210        ))
211        .finish_non_exhaustive()
212    }
213}
214#[cfg(feature = "serialize")]
215impl serde::Serialize for PaymentIntentPaymentMethodOptionsMandateOptionsAcssDebitPaymentSchedule {
216    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
217    where
218        S: serde::Serializer,
219    {
220        serializer.serialize_str(self.as_str())
221    }
222}
223impl miniserde::Deserialize
224    for PaymentIntentPaymentMethodOptionsMandateOptionsAcssDebitPaymentSchedule
225{
226    fn begin(out: &mut Option<Self>) -> &mut dyn miniserde::de::Visitor {
227        crate::Place::new(out)
228    }
229}
230
231impl miniserde::de::Visitor
232    for crate::Place<PaymentIntentPaymentMethodOptionsMandateOptionsAcssDebitPaymentSchedule>
233{
234    fn string(&mut self, s: &str) -> miniserde::Result<()> {
235        use std::str::FromStr;
236        self.out = Some(
237            PaymentIntentPaymentMethodOptionsMandateOptionsAcssDebitPaymentSchedule::from_str(s)
238                .expect("infallible"),
239        );
240        Ok(())
241    }
242}
243
244stripe_types::impl_from_val_with_from_str!(
245    PaymentIntentPaymentMethodOptionsMandateOptionsAcssDebitPaymentSchedule
246);
247#[cfg(feature = "deserialize")]
248impl<'de> serde::Deserialize<'de>
249    for PaymentIntentPaymentMethodOptionsMandateOptionsAcssDebitPaymentSchedule
250{
251    fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
252        use std::str::FromStr;
253        let s: std::borrow::Cow<'de, str> = serde::Deserialize::deserialize(deserializer)?;
254        Ok(Self::from_str(&s).expect("infallible"))
255    }
256}
257/// Transaction type of the mandate.
258#[derive(Clone, Eq, PartialEq)]
259#[non_exhaustive]
260pub enum PaymentIntentPaymentMethodOptionsMandateOptionsAcssDebitTransactionType {
261    Business,
262    Personal,
263    /// An unrecognized value from Stripe. Should not be used as a request parameter.
264    Unknown(String),
265}
266impl PaymentIntentPaymentMethodOptionsMandateOptionsAcssDebitTransactionType {
267    pub fn as_str(&self) -> &str {
268        use PaymentIntentPaymentMethodOptionsMandateOptionsAcssDebitTransactionType::*;
269        match self {
270            Business => "business",
271            Personal => "personal",
272            Unknown(v) => v,
273        }
274    }
275}
276
277impl std::str::FromStr for PaymentIntentPaymentMethodOptionsMandateOptionsAcssDebitTransactionType {
278    type Err = std::convert::Infallible;
279    fn from_str(s: &str) -> Result<Self, Self::Err> {
280        use PaymentIntentPaymentMethodOptionsMandateOptionsAcssDebitTransactionType::*;
281        match s {
282            "business" => Ok(Business),
283            "personal" => Ok(Personal),
284            v => {
285                tracing::warn!(
286                    "Unknown value '{}' for enum '{}'",
287                    v,
288                    "PaymentIntentPaymentMethodOptionsMandateOptionsAcssDebitTransactionType"
289                );
290                Ok(Unknown(v.to_owned()))
291            }
292        }
293    }
294}
295impl std::fmt::Display for PaymentIntentPaymentMethodOptionsMandateOptionsAcssDebitTransactionType {
296    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
297        f.write_str(self.as_str())
298    }
299}
300
301#[cfg(not(feature = "redact-generated-debug"))]
302impl std::fmt::Debug for PaymentIntentPaymentMethodOptionsMandateOptionsAcssDebitTransactionType {
303    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
304        f.write_str(self.as_str())
305    }
306}
307#[cfg(feature = "redact-generated-debug")]
308impl std::fmt::Debug for PaymentIntentPaymentMethodOptionsMandateOptionsAcssDebitTransactionType {
309    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
310        f.debug_struct(stringify!(
311            PaymentIntentPaymentMethodOptionsMandateOptionsAcssDebitTransactionType
312        ))
313        .finish_non_exhaustive()
314    }
315}
316#[cfg(feature = "serialize")]
317impl serde::Serialize for PaymentIntentPaymentMethodOptionsMandateOptionsAcssDebitTransactionType {
318    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
319    where
320        S: serde::Serializer,
321    {
322        serializer.serialize_str(self.as_str())
323    }
324}
325impl miniserde::Deserialize
326    for PaymentIntentPaymentMethodOptionsMandateOptionsAcssDebitTransactionType
327{
328    fn begin(out: &mut Option<Self>) -> &mut dyn miniserde::de::Visitor {
329        crate::Place::new(out)
330    }
331}
332
333impl miniserde::de::Visitor
334    for crate::Place<PaymentIntentPaymentMethodOptionsMandateOptionsAcssDebitTransactionType>
335{
336    fn string(&mut self, s: &str) -> miniserde::Result<()> {
337        use std::str::FromStr;
338        self.out = Some(
339            PaymentIntentPaymentMethodOptionsMandateOptionsAcssDebitTransactionType::from_str(s)
340                .expect("infallible"),
341        );
342        Ok(())
343    }
344}
345
346stripe_types::impl_from_val_with_from_str!(
347    PaymentIntentPaymentMethodOptionsMandateOptionsAcssDebitTransactionType
348);
349#[cfg(feature = "deserialize")]
350impl<'de> serde::Deserialize<'de>
351    for PaymentIntentPaymentMethodOptionsMandateOptionsAcssDebitTransactionType
352{
353    fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
354        use std::str::FromStr;
355        let s: std::borrow::Cow<'de, str> = serde::Deserialize::deserialize(deserializer)?;
356        Ok(Self::from_str(&s).expect("infallible"))
357    }
358}