stripe_shared/
payment_method_details_fpx.rs

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