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