stripe_shared/
mandate_payment_method_details.rs

1#[derive(Clone, Debug)]
2#[cfg_attr(feature = "serialize", derive(serde::Serialize))]
3#[cfg_attr(feature = "deserialize", derive(serde::Deserialize))]
4pub struct MandatePaymentMethodDetails {
5    pub acss_debit: Option<stripe_shared::MandateAcssDebit>,
6    pub amazon_pay: Option<stripe_shared::MandateAmazonPay>,
7    pub au_becs_debit: Option<stripe_shared::MandateAuBecsDebit>,
8    pub bacs_debit: Option<stripe_shared::MandateBacsDebit>,
9    pub card: Option<stripe_shared::CardMandatePaymentMethodDetails>,
10    pub cashapp: Option<stripe_shared::MandateCashapp>,
11    pub kakao_pay: Option<stripe_shared::MandateKakaoPay>,
12    pub kr_card: Option<stripe_shared::MandateKrCard>,
13    pub link: Option<stripe_shared::MandateLink>,
14    pub naver_pay: Option<stripe_shared::MandateNaverPay>,
15    pub nz_bank_account: Option<stripe_shared::MandateNzBankAccount>,
16    pub paypal: Option<stripe_shared::MandatePaypal>,
17    pub revolut_pay: Option<stripe_shared::MandateRevolutPay>,
18    pub sepa_debit: Option<stripe_shared::MandateSepaDebit>,
19    /// This mandate corresponds with a specific payment method type.
20    /// The `payment_method_details` includes an additional hash with the same name and contains mandate information that's specific to that payment method.
21    #[cfg_attr(any(feature = "deserialize", feature = "serialize"), serde(rename = "type"))]
22    pub type_: String,
23    pub us_bank_account: Option<stripe_shared::MandateUsBankAccount>,
24}
25#[doc(hidden)]
26pub struct MandatePaymentMethodDetailsBuilder {
27    acss_debit: Option<Option<stripe_shared::MandateAcssDebit>>,
28    amazon_pay: Option<Option<stripe_shared::MandateAmazonPay>>,
29    au_becs_debit: Option<Option<stripe_shared::MandateAuBecsDebit>>,
30    bacs_debit: Option<Option<stripe_shared::MandateBacsDebit>>,
31    card: Option<Option<stripe_shared::CardMandatePaymentMethodDetails>>,
32    cashapp: Option<Option<stripe_shared::MandateCashapp>>,
33    kakao_pay: Option<Option<stripe_shared::MandateKakaoPay>>,
34    kr_card: Option<Option<stripe_shared::MandateKrCard>>,
35    link: Option<Option<stripe_shared::MandateLink>>,
36    naver_pay: Option<Option<stripe_shared::MandateNaverPay>>,
37    nz_bank_account: Option<Option<stripe_shared::MandateNzBankAccount>>,
38    paypal: Option<Option<stripe_shared::MandatePaypal>>,
39    revolut_pay: Option<Option<stripe_shared::MandateRevolutPay>>,
40    sepa_debit: Option<Option<stripe_shared::MandateSepaDebit>>,
41    type_: Option<String>,
42    us_bank_account: Option<Option<stripe_shared::MandateUsBankAccount>>,
43}
44
45#[allow(
46    unused_variables,
47    irrefutable_let_patterns,
48    clippy::let_unit_value,
49    clippy::match_single_binding,
50    clippy::single_match
51)]
52const _: () = {
53    use miniserde::de::{Map, Visitor};
54    use miniserde::json::Value;
55    use miniserde::{make_place, Deserialize, Result};
56    use stripe_types::miniserde_helpers::FromValueOpt;
57    use stripe_types::{MapBuilder, ObjectDeser};
58
59    make_place!(Place);
60
61    impl Deserialize for MandatePaymentMethodDetails {
62        fn begin(out: &mut Option<Self>) -> &mut dyn Visitor {
63            Place::new(out)
64        }
65    }
66
67    struct Builder<'a> {
68        out: &'a mut Option<MandatePaymentMethodDetails>,
69        builder: MandatePaymentMethodDetailsBuilder,
70    }
71
72    impl Visitor for Place<MandatePaymentMethodDetails> {
73        fn map(&mut self) -> Result<Box<dyn Map + '_>> {
74            Ok(Box::new(Builder {
75                out: &mut self.out,
76                builder: MandatePaymentMethodDetailsBuilder::deser_default(),
77            }))
78        }
79    }
80
81    impl MapBuilder for MandatePaymentMethodDetailsBuilder {
82        type Out = MandatePaymentMethodDetails;
83        fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
84            Ok(match k {
85                "acss_debit" => Deserialize::begin(&mut self.acss_debit),
86                "amazon_pay" => Deserialize::begin(&mut self.amazon_pay),
87                "au_becs_debit" => Deserialize::begin(&mut self.au_becs_debit),
88                "bacs_debit" => Deserialize::begin(&mut self.bacs_debit),
89                "card" => Deserialize::begin(&mut self.card),
90                "cashapp" => Deserialize::begin(&mut self.cashapp),
91                "kakao_pay" => Deserialize::begin(&mut self.kakao_pay),
92                "kr_card" => Deserialize::begin(&mut self.kr_card),
93                "link" => Deserialize::begin(&mut self.link),
94                "naver_pay" => Deserialize::begin(&mut self.naver_pay),
95                "nz_bank_account" => Deserialize::begin(&mut self.nz_bank_account),
96                "paypal" => Deserialize::begin(&mut self.paypal),
97                "revolut_pay" => Deserialize::begin(&mut self.revolut_pay),
98                "sepa_debit" => Deserialize::begin(&mut self.sepa_debit),
99                "type" => Deserialize::begin(&mut self.type_),
100                "us_bank_account" => Deserialize::begin(&mut self.us_bank_account),
101
102                _ => <dyn Visitor>::ignore(),
103            })
104        }
105
106        fn deser_default() -> Self {
107            Self {
108                acss_debit: Deserialize::default(),
109                amazon_pay: Deserialize::default(),
110                au_becs_debit: Deserialize::default(),
111                bacs_debit: Deserialize::default(),
112                card: Deserialize::default(),
113                cashapp: Deserialize::default(),
114                kakao_pay: Deserialize::default(),
115                kr_card: Deserialize::default(),
116                link: Deserialize::default(),
117                naver_pay: Deserialize::default(),
118                nz_bank_account: Deserialize::default(),
119                paypal: Deserialize::default(),
120                revolut_pay: Deserialize::default(),
121                sepa_debit: Deserialize::default(),
122                type_: Deserialize::default(),
123                us_bank_account: Deserialize::default(),
124            }
125        }
126
127        fn take_out(&mut self) -> Option<Self::Out> {
128            let (
129                Some(acss_debit),
130                Some(amazon_pay),
131                Some(au_becs_debit),
132                Some(bacs_debit),
133                Some(card),
134                Some(cashapp),
135                Some(kakao_pay),
136                Some(kr_card),
137                Some(link),
138                Some(naver_pay),
139                Some(nz_bank_account),
140                Some(paypal),
141                Some(revolut_pay),
142                Some(sepa_debit),
143                Some(type_),
144                Some(us_bank_account),
145            ) = (
146                self.acss_debit.take(),
147                self.amazon_pay,
148                self.au_becs_debit.take(),
149                self.bacs_debit.take(),
150                self.card,
151                self.cashapp,
152                self.kakao_pay,
153                self.kr_card,
154                self.link,
155                self.naver_pay,
156                self.nz_bank_account,
157                self.paypal.take(),
158                self.revolut_pay,
159                self.sepa_debit.take(),
160                self.type_.take(),
161                self.us_bank_account,
162            )
163            else {
164                return None;
165            };
166            Some(Self::Out {
167                acss_debit,
168                amazon_pay,
169                au_becs_debit,
170                bacs_debit,
171                card,
172                cashapp,
173                kakao_pay,
174                kr_card,
175                link,
176                naver_pay,
177                nz_bank_account,
178                paypal,
179                revolut_pay,
180                sepa_debit,
181                type_,
182                us_bank_account,
183            })
184        }
185    }
186
187    impl<'a> Map for Builder<'a> {
188        fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
189            self.builder.key(k)
190        }
191
192        fn finish(&mut self) -> Result<()> {
193            *self.out = self.builder.take_out();
194            Ok(())
195        }
196    }
197
198    impl ObjectDeser for MandatePaymentMethodDetails {
199        type Builder = MandatePaymentMethodDetailsBuilder;
200    }
201
202    impl FromValueOpt for MandatePaymentMethodDetails {
203        fn from_value(v: Value) -> Option<Self> {
204            let Value::Object(obj) = v else {
205                return None;
206            };
207            let mut b = MandatePaymentMethodDetailsBuilder::deser_default();
208            for (k, v) in obj {
209                match k.as_str() {
210                    "acss_debit" => b.acss_debit = FromValueOpt::from_value(v),
211                    "amazon_pay" => b.amazon_pay = FromValueOpt::from_value(v),
212                    "au_becs_debit" => b.au_becs_debit = FromValueOpt::from_value(v),
213                    "bacs_debit" => b.bacs_debit = FromValueOpt::from_value(v),
214                    "card" => b.card = FromValueOpt::from_value(v),
215                    "cashapp" => b.cashapp = FromValueOpt::from_value(v),
216                    "kakao_pay" => b.kakao_pay = FromValueOpt::from_value(v),
217                    "kr_card" => b.kr_card = FromValueOpt::from_value(v),
218                    "link" => b.link = FromValueOpt::from_value(v),
219                    "naver_pay" => b.naver_pay = FromValueOpt::from_value(v),
220                    "nz_bank_account" => b.nz_bank_account = FromValueOpt::from_value(v),
221                    "paypal" => b.paypal = FromValueOpt::from_value(v),
222                    "revolut_pay" => b.revolut_pay = FromValueOpt::from_value(v),
223                    "sepa_debit" => b.sepa_debit = FromValueOpt::from_value(v),
224                    "type" => b.type_ = FromValueOpt::from_value(v),
225                    "us_bank_account" => b.us_bank_account = FromValueOpt::from_value(v),
226
227                    _ => {}
228                }
229            }
230            b.take_out()
231        }
232    }
233};