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