1#[derive(Clone, Debug)]
2#[cfg_attr(feature = "serialize", derive(serde::Serialize))]
3#[cfg_attr(feature = "deserialize", derive(serde::Deserialize))]
4pub struct PaymentMethodDetailsFpx {
5 pub account_holder_type: Option<PaymentMethodDetailsFpxAccountHolderType>,
7 pub bank: PaymentMethodDetailsFpxBank,
10 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#[derive(Clone, Eq, PartialEq)]
120#[non_exhaustive]
121pub enum PaymentMethodDetailsFpxAccountHolderType {
122 Company,
123 Individual,
124 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#[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 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}