1#[derive(Clone, Debug)]
2#[cfg_attr(feature = "serialize", derive(serde::Serialize))]
3#[cfg_attr(feature = "deserialize", derive(serde::Deserialize))]
4pub struct PaymentMethodDetailsCardPresent {
5 pub amount_authorized: Option<i64>,
7 pub brand: Option<String>,
10 pub brand_product: Option<String>,
12 pub capture_before: Option<stripe_types::Timestamp>,
14 pub cardholder_name: Option<String>,
19 pub country: Option<String>,
22 pub description: Option<String>,
25 pub emv_auth_data: Option<String>,
27 pub exp_month: i64,
29 pub exp_year: i64,
31 pub fingerprint: Option<String>,
37 pub funding: Option<String>,
39 pub generated_card: Option<String>,
42 pub iin: Option<String>,
45 pub incremental_authorization_supported: bool,
48 pub issuer: Option<String>,
51 pub last4: Option<String>,
53 pub network: Option<String>,
56 pub network_transaction_id: Option<String>,
60 pub offline: Option<stripe_shared::PaymentMethodDetailsCardPresentOffline>,
62 pub overcapture_supported: bool,
64 pub preferred_locales: Option<Vec<String>>,
67 pub read_method: Option<PaymentMethodDetailsCardPresentReadMethod>,
69 pub receipt: Option<stripe_shared::PaymentMethodDetailsCardPresentReceipt>,
71 pub wallet: Option<stripe_shared::PaymentFlowsPrivatePaymentMethodsCardPresentCommonWallet>,
72}
73#[doc(hidden)]
74pub struct PaymentMethodDetailsCardPresentBuilder {
75 amount_authorized: Option<Option<i64>>,
76 brand: Option<Option<String>>,
77 brand_product: Option<Option<String>>,
78 capture_before: Option<Option<stripe_types::Timestamp>>,
79 cardholder_name: Option<Option<String>>,
80 country: Option<Option<String>>,
81 description: Option<Option<String>>,
82 emv_auth_data: Option<Option<String>>,
83 exp_month: Option<i64>,
84 exp_year: Option<i64>,
85 fingerprint: Option<Option<String>>,
86 funding: Option<Option<String>>,
87 generated_card: Option<Option<String>>,
88 iin: Option<Option<String>>,
89 incremental_authorization_supported: Option<bool>,
90 issuer: Option<Option<String>>,
91 last4: Option<Option<String>>,
92 network: Option<Option<String>>,
93 network_transaction_id: Option<Option<String>>,
94 offline: Option<Option<stripe_shared::PaymentMethodDetailsCardPresentOffline>>,
95 overcapture_supported: Option<bool>,
96 preferred_locales: Option<Option<Vec<String>>>,
97 read_method: Option<Option<PaymentMethodDetailsCardPresentReadMethod>>,
98 receipt: Option<Option<stripe_shared::PaymentMethodDetailsCardPresentReceipt>>,
99 wallet: Option<Option<stripe_shared::PaymentFlowsPrivatePaymentMethodsCardPresentCommonWallet>>,
100}
101
102#[allow(
103 unused_variables,
104 irrefutable_let_patterns,
105 clippy::let_unit_value,
106 clippy::match_single_binding,
107 clippy::single_match
108)]
109const _: () = {
110 use miniserde::de::{Map, Visitor};
111 use miniserde::json::Value;
112 use miniserde::{Deserialize, Result, make_place};
113 use stripe_types::miniserde_helpers::FromValueOpt;
114 use stripe_types::{MapBuilder, ObjectDeser};
115
116 make_place!(Place);
117
118 impl Deserialize for PaymentMethodDetailsCardPresent {
119 fn begin(out: &mut Option<Self>) -> &mut dyn Visitor {
120 Place::new(out)
121 }
122 }
123
124 struct Builder<'a> {
125 out: &'a mut Option<PaymentMethodDetailsCardPresent>,
126 builder: PaymentMethodDetailsCardPresentBuilder,
127 }
128
129 impl Visitor for Place<PaymentMethodDetailsCardPresent> {
130 fn map(&mut self) -> Result<Box<dyn Map + '_>> {
131 Ok(Box::new(Builder {
132 out: &mut self.out,
133 builder: PaymentMethodDetailsCardPresentBuilder::deser_default(),
134 }))
135 }
136 }
137
138 impl MapBuilder for PaymentMethodDetailsCardPresentBuilder {
139 type Out = PaymentMethodDetailsCardPresent;
140 fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
141 Ok(match k {
142 "amount_authorized" => Deserialize::begin(&mut self.amount_authorized),
143 "brand" => Deserialize::begin(&mut self.brand),
144 "brand_product" => Deserialize::begin(&mut self.brand_product),
145 "capture_before" => Deserialize::begin(&mut self.capture_before),
146 "cardholder_name" => Deserialize::begin(&mut self.cardholder_name),
147 "country" => Deserialize::begin(&mut self.country),
148 "description" => Deserialize::begin(&mut self.description),
149 "emv_auth_data" => Deserialize::begin(&mut self.emv_auth_data),
150 "exp_month" => Deserialize::begin(&mut self.exp_month),
151 "exp_year" => Deserialize::begin(&mut self.exp_year),
152 "fingerprint" => Deserialize::begin(&mut self.fingerprint),
153 "funding" => Deserialize::begin(&mut self.funding),
154 "generated_card" => Deserialize::begin(&mut self.generated_card),
155 "iin" => Deserialize::begin(&mut self.iin),
156 "incremental_authorization_supported" => {
157 Deserialize::begin(&mut self.incremental_authorization_supported)
158 }
159 "issuer" => Deserialize::begin(&mut self.issuer),
160 "last4" => Deserialize::begin(&mut self.last4),
161 "network" => Deserialize::begin(&mut self.network),
162 "network_transaction_id" => Deserialize::begin(&mut self.network_transaction_id),
163 "offline" => Deserialize::begin(&mut self.offline),
164 "overcapture_supported" => Deserialize::begin(&mut self.overcapture_supported),
165 "preferred_locales" => Deserialize::begin(&mut self.preferred_locales),
166 "read_method" => Deserialize::begin(&mut self.read_method),
167 "receipt" => Deserialize::begin(&mut self.receipt),
168 "wallet" => Deserialize::begin(&mut self.wallet),
169 _ => <dyn Visitor>::ignore(),
170 })
171 }
172
173 fn deser_default() -> Self {
174 Self {
175 amount_authorized: Deserialize::default(),
176 brand: Deserialize::default(),
177 brand_product: Deserialize::default(),
178 capture_before: Deserialize::default(),
179 cardholder_name: Deserialize::default(),
180 country: Deserialize::default(),
181 description: Deserialize::default(),
182 emv_auth_data: Deserialize::default(),
183 exp_month: Deserialize::default(),
184 exp_year: Deserialize::default(),
185 fingerprint: Deserialize::default(),
186 funding: Deserialize::default(),
187 generated_card: Deserialize::default(),
188 iin: Deserialize::default(),
189 incremental_authorization_supported: Deserialize::default(),
190 issuer: Deserialize::default(),
191 last4: Deserialize::default(),
192 network: Deserialize::default(),
193 network_transaction_id: Deserialize::default(),
194 offline: Deserialize::default(),
195 overcapture_supported: Deserialize::default(),
196 preferred_locales: Deserialize::default(),
197 read_method: Deserialize::default(),
198 receipt: Deserialize::default(),
199 wallet: Deserialize::default(),
200 }
201 }
202
203 fn take_out(&mut self) -> Option<Self::Out> {
204 let (
205 Some(amount_authorized),
206 Some(brand),
207 Some(brand_product),
208 Some(capture_before),
209 Some(cardholder_name),
210 Some(country),
211 Some(description),
212 Some(emv_auth_data),
213 Some(exp_month),
214 Some(exp_year),
215 Some(fingerprint),
216 Some(funding),
217 Some(generated_card),
218 Some(iin),
219 Some(incremental_authorization_supported),
220 Some(issuer),
221 Some(last4),
222 Some(network),
223 Some(network_transaction_id),
224 Some(offline),
225 Some(overcapture_supported),
226 Some(preferred_locales),
227 Some(read_method),
228 Some(receipt),
229 Some(wallet),
230 ) = (
231 self.amount_authorized,
232 self.brand.take(),
233 self.brand_product.take(),
234 self.capture_before,
235 self.cardholder_name.take(),
236 self.country.take(),
237 self.description.take(),
238 self.emv_auth_data.take(),
239 self.exp_month,
240 self.exp_year,
241 self.fingerprint.take(),
242 self.funding.take(),
243 self.generated_card.take(),
244 self.iin.take(),
245 self.incremental_authorization_supported,
246 self.issuer.take(),
247 self.last4.take(),
248 self.network.take(),
249 self.network_transaction_id.take(),
250 self.offline,
251 self.overcapture_supported,
252 self.preferred_locales.take(),
253 self.read_method,
254 self.receipt.take(),
255 self.wallet,
256 )
257 else {
258 return None;
259 };
260 Some(Self::Out {
261 amount_authorized,
262 brand,
263 brand_product,
264 capture_before,
265 cardholder_name,
266 country,
267 description,
268 emv_auth_data,
269 exp_month,
270 exp_year,
271 fingerprint,
272 funding,
273 generated_card,
274 iin,
275 incremental_authorization_supported,
276 issuer,
277 last4,
278 network,
279 network_transaction_id,
280 offline,
281 overcapture_supported,
282 preferred_locales,
283 read_method,
284 receipt,
285 wallet,
286 })
287 }
288 }
289
290 impl Map for Builder<'_> {
291 fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
292 self.builder.key(k)
293 }
294
295 fn finish(&mut self) -> Result<()> {
296 *self.out = self.builder.take_out();
297 Ok(())
298 }
299 }
300
301 impl ObjectDeser for PaymentMethodDetailsCardPresent {
302 type Builder = PaymentMethodDetailsCardPresentBuilder;
303 }
304
305 impl FromValueOpt for PaymentMethodDetailsCardPresent {
306 fn from_value(v: Value) -> Option<Self> {
307 let Value::Object(obj) = v else {
308 return None;
309 };
310 let mut b = PaymentMethodDetailsCardPresentBuilder::deser_default();
311 for (k, v) in obj {
312 match k.as_str() {
313 "amount_authorized" => b.amount_authorized = FromValueOpt::from_value(v),
314 "brand" => b.brand = FromValueOpt::from_value(v),
315 "brand_product" => b.brand_product = FromValueOpt::from_value(v),
316 "capture_before" => b.capture_before = FromValueOpt::from_value(v),
317 "cardholder_name" => b.cardholder_name = FromValueOpt::from_value(v),
318 "country" => b.country = FromValueOpt::from_value(v),
319 "description" => b.description = FromValueOpt::from_value(v),
320 "emv_auth_data" => b.emv_auth_data = FromValueOpt::from_value(v),
321 "exp_month" => b.exp_month = FromValueOpt::from_value(v),
322 "exp_year" => b.exp_year = FromValueOpt::from_value(v),
323 "fingerprint" => b.fingerprint = FromValueOpt::from_value(v),
324 "funding" => b.funding = FromValueOpt::from_value(v),
325 "generated_card" => b.generated_card = FromValueOpt::from_value(v),
326 "iin" => b.iin = FromValueOpt::from_value(v),
327 "incremental_authorization_supported" => {
328 b.incremental_authorization_supported = FromValueOpt::from_value(v)
329 }
330 "issuer" => b.issuer = FromValueOpt::from_value(v),
331 "last4" => b.last4 = FromValueOpt::from_value(v),
332 "network" => b.network = FromValueOpt::from_value(v),
333 "network_transaction_id" => {
334 b.network_transaction_id = FromValueOpt::from_value(v)
335 }
336 "offline" => b.offline = FromValueOpt::from_value(v),
337 "overcapture_supported" => {
338 b.overcapture_supported = FromValueOpt::from_value(v)
339 }
340 "preferred_locales" => b.preferred_locales = FromValueOpt::from_value(v),
341 "read_method" => b.read_method = FromValueOpt::from_value(v),
342 "receipt" => b.receipt = FromValueOpt::from_value(v),
343 "wallet" => b.wallet = FromValueOpt::from_value(v),
344 _ => {}
345 }
346 }
347 b.take_out()
348 }
349 }
350};
351#[derive(Copy, Clone, Eq, PartialEq)]
353pub enum PaymentMethodDetailsCardPresentReadMethod {
354 ContactEmv,
355 ContactlessEmv,
356 ContactlessMagstripeMode,
357 MagneticStripeFallback,
358 MagneticStripeTrack2,
359}
360impl PaymentMethodDetailsCardPresentReadMethod {
361 pub fn as_str(self) -> &'static str {
362 use PaymentMethodDetailsCardPresentReadMethod::*;
363 match self {
364 ContactEmv => "contact_emv",
365 ContactlessEmv => "contactless_emv",
366 ContactlessMagstripeMode => "contactless_magstripe_mode",
367 MagneticStripeFallback => "magnetic_stripe_fallback",
368 MagneticStripeTrack2 => "magnetic_stripe_track2",
369 }
370 }
371}
372
373impl std::str::FromStr for PaymentMethodDetailsCardPresentReadMethod {
374 type Err = stripe_types::StripeParseError;
375 fn from_str(s: &str) -> Result<Self, Self::Err> {
376 use PaymentMethodDetailsCardPresentReadMethod::*;
377 match s {
378 "contact_emv" => Ok(ContactEmv),
379 "contactless_emv" => Ok(ContactlessEmv),
380 "contactless_magstripe_mode" => Ok(ContactlessMagstripeMode),
381 "magnetic_stripe_fallback" => Ok(MagneticStripeFallback),
382 "magnetic_stripe_track2" => Ok(MagneticStripeTrack2),
383 _ => Err(stripe_types::StripeParseError),
384 }
385 }
386}
387impl std::fmt::Display for PaymentMethodDetailsCardPresentReadMethod {
388 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
389 f.write_str(self.as_str())
390 }
391}
392
393impl std::fmt::Debug for PaymentMethodDetailsCardPresentReadMethod {
394 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
395 f.write_str(self.as_str())
396 }
397}
398#[cfg(feature = "serialize")]
399impl serde::Serialize for PaymentMethodDetailsCardPresentReadMethod {
400 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
401 where
402 S: serde::Serializer,
403 {
404 serializer.serialize_str(self.as_str())
405 }
406}
407impl miniserde::Deserialize for PaymentMethodDetailsCardPresentReadMethod {
408 fn begin(out: &mut Option<Self>) -> &mut dyn miniserde::de::Visitor {
409 crate::Place::new(out)
410 }
411}
412
413impl miniserde::de::Visitor for crate::Place<PaymentMethodDetailsCardPresentReadMethod> {
414 fn string(&mut self, s: &str) -> miniserde::Result<()> {
415 use std::str::FromStr;
416 self.out = Some(
417 PaymentMethodDetailsCardPresentReadMethod::from_str(s).map_err(|_| miniserde::Error)?,
418 );
419 Ok(())
420 }
421}
422
423stripe_types::impl_from_val_with_from_str!(PaymentMethodDetailsCardPresentReadMethod);
424#[cfg(feature = "deserialize")]
425impl<'de> serde::Deserialize<'de> for PaymentMethodDetailsCardPresentReadMethod {
426 fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
427 use std::str::FromStr;
428 let s: std::borrow::Cow<'de, str> = serde::Deserialize::deserialize(deserializer)?;
429 Self::from_str(&s).map_err(|_| {
430 serde::de::Error::custom("Unknown value for PaymentMethodDetailsCardPresentReadMethod")
431 })
432 }
433}