1#[derive(Clone, Debug)]
2#[cfg_attr(feature = "serialize", derive(serde::Serialize))]
3#[cfg_attr(feature = "deserialize", derive(serde::Deserialize))]
4pub struct PaymentMethodDetailsKrCard {
5 pub brand: Option<PaymentMethodDetailsKrCardBrand>,
7 pub buyer_id: Option<String>,
9 pub last4: Option<String>,
11 pub transaction_id: Option<String>,
13}
14#[doc(hidden)]
15pub struct PaymentMethodDetailsKrCardBuilder {
16 brand: Option<Option<PaymentMethodDetailsKrCardBrand>>,
17 buyer_id: Option<Option<String>>,
18 last4: Option<Option<String>>,
19 transaction_id: Option<Option<String>>,
20}
21
22#[allow(
23 unused_variables,
24 irrefutable_let_patterns,
25 clippy::let_unit_value,
26 clippy::match_single_binding,
27 clippy::single_match
28)]
29const _: () = {
30 use miniserde::de::{Map, Visitor};
31 use miniserde::json::Value;
32 use miniserde::{Deserialize, Result, make_place};
33 use stripe_types::miniserde_helpers::FromValueOpt;
34 use stripe_types::{MapBuilder, ObjectDeser};
35
36 make_place!(Place);
37
38 impl Deserialize for PaymentMethodDetailsKrCard {
39 fn begin(out: &mut Option<Self>) -> &mut dyn Visitor {
40 Place::new(out)
41 }
42 }
43
44 struct Builder<'a> {
45 out: &'a mut Option<PaymentMethodDetailsKrCard>,
46 builder: PaymentMethodDetailsKrCardBuilder,
47 }
48
49 impl Visitor for Place<PaymentMethodDetailsKrCard> {
50 fn map(&mut self) -> Result<Box<dyn Map + '_>> {
51 Ok(Box::new(Builder {
52 out: &mut self.out,
53 builder: PaymentMethodDetailsKrCardBuilder::deser_default(),
54 }))
55 }
56 }
57
58 impl MapBuilder for PaymentMethodDetailsKrCardBuilder {
59 type Out = PaymentMethodDetailsKrCard;
60 fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
61 Ok(match k {
62 "brand" => Deserialize::begin(&mut self.brand),
63 "buyer_id" => Deserialize::begin(&mut self.buyer_id),
64 "last4" => Deserialize::begin(&mut self.last4),
65 "transaction_id" => Deserialize::begin(&mut self.transaction_id),
66 _ => <dyn Visitor>::ignore(),
67 })
68 }
69
70 fn deser_default() -> Self {
71 Self {
72 brand: Deserialize::default(),
73 buyer_id: Deserialize::default(),
74 last4: Deserialize::default(),
75 transaction_id: Deserialize::default(),
76 }
77 }
78
79 fn take_out(&mut self) -> Option<Self::Out> {
80 let (Some(brand), Some(buyer_id), Some(last4), Some(transaction_id)) = (
81 self.brand.take(),
82 self.buyer_id.take(),
83 self.last4.take(),
84 self.transaction_id.take(),
85 ) else {
86 return None;
87 };
88 Some(Self::Out { brand, buyer_id, last4, transaction_id })
89 }
90 }
91
92 impl Map for Builder<'_> {
93 fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
94 self.builder.key(k)
95 }
96
97 fn finish(&mut self) -> Result<()> {
98 *self.out = self.builder.take_out();
99 Ok(())
100 }
101 }
102
103 impl ObjectDeser for PaymentMethodDetailsKrCard {
104 type Builder = PaymentMethodDetailsKrCardBuilder;
105 }
106
107 impl FromValueOpt for PaymentMethodDetailsKrCard {
108 fn from_value(v: Value) -> Option<Self> {
109 let Value::Object(obj) = v else {
110 return None;
111 };
112 let mut b = PaymentMethodDetailsKrCardBuilder::deser_default();
113 for (k, v) in obj {
114 match k.as_str() {
115 "brand" => b.brand = FromValueOpt::from_value(v),
116 "buyer_id" => b.buyer_id = FromValueOpt::from_value(v),
117 "last4" => b.last4 = FromValueOpt::from_value(v),
118 "transaction_id" => b.transaction_id = FromValueOpt::from_value(v),
119 _ => {}
120 }
121 }
122 b.take_out()
123 }
124 }
125};
126#[derive(Clone, Eq, PartialEq)]
128#[non_exhaustive]
129pub enum PaymentMethodDetailsKrCardBrand {
130 Bc,
131 Citi,
132 Hana,
133 Hyundai,
134 Jeju,
135 Jeonbuk,
136 Kakaobank,
137 Kbank,
138 Kdbbank,
139 Kookmin,
140 Kwangju,
141 Lotte,
142 Mg,
143 Nh,
144 Post,
145 Samsung,
146 Savingsbank,
147 Shinhan,
148 Shinhyup,
149 Suhyup,
150 Tossbank,
151 Woori,
152 Unknown(String),
154}
155impl PaymentMethodDetailsKrCardBrand {
156 pub fn as_str(&self) -> &str {
157 use PaymentMethodDetailsKrCardBrand::*;
158 match self {
159 Bc => "bc",
160 Citi => "citi",
161 Hana => "hana",
162 Hyundai => "hyundai",
163 Jeju => "jeju",
164 Jeonbuk => "jeonbuk",
165 Kakaobank => "kakaobank",
166 Kbank => "kbank",
167 Kdbbank => "kdbbank",
168 Kookmin => "kookmin",
169 Kwangju => "kwangju",
170 Lotte => "lotte",
171 Mg => "mg",
172 Nh => "nh",
173 Post => "post",
174 Samsung => "samsung",
175 Savingsbank => "savingsbank",
176 Shinhan => "shinhan",
177 Shinhyup => "shinhyup",
178 Suhyup => "suhyup",
179 Tossbank => "tossbank",
180 Woori => "woori",
181 Unknown(v) => v,
182 }
183 }
184}
185
186impl std::str::FromStr for PaymentMethodDetailsKrCardBrand {
187 type Err = std::convert::Infallible;
188 fn from_str(s: &str) -> Result<Self, Self::Err> {
189 use PaymentMethodDetailsKrCardBrand::*;
190 match s {
191 "bc" => Ok(Bc),
192 "citi" => Ok(Citi),
193 "hana" => Ok(Hana),
194 "hyundai" => Ok(Hyundai),
195 "jeju" => Ok(Jeju),
196 "jeonbuk" => Ok(Jeonbuk),
197 "kakaobank" => Ok(Kakaobank),
198 "kbank" => Ok(Kbank),
199 "kdbbank" => Ok(Kdbbank),
200 "kookmin" => Ok(Kookmin),
201 "kwangju" => Ok(Kwangju),
202 "lotte" => Ok(Lotte),
203 "mg" => Ok(Mg),
204 "nh" => Ok(Nh),
205 "post" => Ok(Post),
206 "samsung" => Ok(Samsung),
207 "savingsbank" => Ok(Savingsbank),
208 "shinhan" => Ok(Shinhan),
209 "shinhyup" => Ok(Shinhyup),
210 "suhyup" => Ok(Suhyup),
211 "tossbank" => Ok(Tossbank),
212 "woori" => Ok(Woori),
213 v => Ok(Unknown(v.to_owned())),
214 }
215 }
216}
217impl std::fmt::Display for PaymentMethodDetailsKrCardBrand {
218 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
219 f.write_str(self.as_str())
220 }
221}
222
223impl std::fmt::Debug for PaymentMethodDetailsKrCardBrand {
224 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
225 f.write_str(self.as_str())
226 }
227}
228#[cfg(feature = "serialize")]
229impl serde::Serialize for PaymentMethodDetailsKrCardBrand {
230 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
231 where
232 S: serde::Serializer,
233 {
234 serializer.serialize_str(self.as_str())
235 }
236}
237impl miniserde::Deserialize for PaymentMethodDetailsKrCardBrand {
238 fn begin(out: &mut Option<Self>) -> &mut dyn miniserde::de::Visitor {
239 crate::Place::new(out)
240 }
241}
242
243impl miniserde::de::Visitor for crate::Place<PaymentMethodDetailsKrCardBrand> {
244 fn string(&mut self, s: &str) -> miniserde::Result<()> {
245 use std::str::FromStr;
246 self.out = Some(PaymentMethodDetailsKrCardBrand::from_str(s).unwrap());
247 Ok(())
248 }
249}
250
251stripe_types::impl_from_val_with_from_str!(PaymentMethodDetailsKrCardBrand);
252#[cfg(feature = "deserialize")]
253impl<'de> serde::Deserialize<'de> for PaymentMethodDetailsKrCardBrand {
254 fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
255 use std::str::FromStr;
256 let s: std::borrow::Cow<'de, str> = serde::Deserialize::deserialize(deserializer)?;
257 Ok(Self::from_str(&s).unwrap())
258 }
259}