1#[derive(Clone, Debug)]
2#[cfg_attr(feature = "serialize", derive(serde::Serialize))]
3#[cfg_attr(feature = "deserialize", derive(serde::Deserialize))]
4pub struct ThreeDSecureDetails {
5 pub authentication_flow: Option<ThreeDSecureDetailsAuthenticationFlow>,
8 pub electronic_commerce_indicator: Option<ThreeDSecureDetailsElectronicCommerceIndicator>,
11 pub result: Option<ThreeDSecureDetailsResult>,
13 pub result_reason: Option<ThreeDSecureDetailsResultReason>,
16 pub transaction_id: Option<String>,
19 pub version: Option<ThreeDSecureDetailsVersion>,
21}
22#[doc(hidden)]
23pub struct ThreeDSecureDetailsBuilder {
24 authentication_flow: Option<Option<ThreeDSecureDetailsAuthenticationFlow>>,
25 electronic_commerce_indicator: Option<Option<ThreeDSecureDetailsElectronicCommerceIndicator>>,
26 result: Option<Option<ThreeDSecureDetailsResult>>,
27 result_reason: Option<Option<ThreeDSecureDetailsResultReason>>,
28 transaction_id: Option<Option<String>>,
29 version: Option<Option<ThreeDSecureDetailsVersion>>,
30}
31
32#[allow(
33 unused_variables,
34 irrefutable_let_patterns,
35 clippy::let_unit_value,
36 clippy::match_single_binding,
37 clippy::single_match
38)]
39const _: () = {
40 use miniserde::de::{Map, Visitor};
41 use miniserde::json::Value;
42 use miniserde::{Deserialize, Result, make_place};
43 use stripe_types::miniserde_helpers::FromValueOpt;
44 use stripe_types::{MapBuilder, ObjectDeser};
45
46 make_place!(Place);
47
48 impl Deserialize for ThreeDSecureDetails {
49 fn begin(out: &mut Option<Self>) -> &mut dyn Visitor {
50 Place::new(out)
51 }
52 }
53
54 struct Builder<'a> {
55 out: &'a mut Option<ThreeDSecureDetails>,
56 builder: ThreeDSecureDetailsBuilder,
57 }
58
59 impl Visitor for Place<ThreeDSecureDetails> {
60 fn map(&mut self) -> Result<Box<dyn Map + '_>> {
61 Ok(Box::new(Builder {
62 out: &mut self.out,
63 builder: ThreeDSecureDetailsBuilder::deser_default(),
64 }))
65 }
66 }
67
68 impl MapBuilder for ThreeDSecureDetailsBuilder {
69 type Out = ThreeDSecureDetails;
70 fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
71 Ok(match k {
72 "authentication_flow" => Deserialize::begin(&mut self.authentication_flow),
73 "electronic_commerce_indicator" => {
74 Deserialize::begin(&mut self.electronic_commerce_indicator)
75 }
76 "result" => Deserialize::begin(&mut self.result),
77 "result_reason" => Deserialize::begin(&mut self.result_reason),
78 "transaction_id" => Deserialize::begin(&mut self.transaction_id),
79 "version" => Deserialize::begin(&mut self.version),
80 _ => <dyn Visitor>::ignore(),
81 })
82 }
83
84 fn deser_default() -> Self {
85 Self {
86 authentication_flow: Deserialize::default(),
87 electronic_commerce_indicator: Deserialize::default(),
88 result: Deserialize::default(),
89 result_reason: Deserialize::default(),
90 transaction_id: Deserialize::default(),
91 version: Deserialize::default(),
92 }
93 }
94
95 fn take_out(&mut self) -> Option<Self::Out> {
96 let (
97 Some(authentication_flow),
98 Some(electronic_commerce_indicator),
99 Some(result),
100 Some(result_reason),
101 Some(transaction_id),
102 Some(version),
103 ) = (
104 self.authentication_flow.take(),
105 self.electronic_commerce_indicator.take(),
106 self.result.take(),
107 self.result_reason.take(),
108 self.transaction_id.take(),
109 self.version.take(),
110 )
111 else {
112 return None;
113 };
114 Some(Self::Out {
115 authentication_flow,
116 electronic_commerce_indicator,
117 result,
118 result_reason,
119 transaction_id,
120 version,
121 })
122 }
123 }
124
125 impl Map for Builder<'_> {
126 fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
127 self.builder.key(k)
128 }
129
130 fn finish(&mut self) -> Result<()> {
131 *self.out = self.builder.take_out();
132 Ok(())
133 }
134 }
135
136 impl ObjectDeser for ThreeDSecureDetails {
137 type Builder = ThreeDSecureDetailsBuilder;
138 }
139
140 impl FromValueOpt for ThreeDSecureDetails {
141 fn from_value(v: Value) -> Option<Self> {
142 let Value::Object(obj) = v else {
143 return None;
144 };
145 let mut b = ThreeDSecureDetailsBuilder::deser_default();
146 for (k, v) in obj {
147 match k.as_str() {
148 "authentication_flow" => b.authentication_flow = FromValueOpt::from_value(v),
149 "electronic_commerce_indicator" => {
150 b.electronic_commerce_indicator = FromValueOpt::from_value(v)
151 }
152 "result" => b.result = FromValueOpt::from_value(v),
153 "result_reason" => b.result_reason = FromValueOpt::from_value(v),
154 "transaction_id" => b.transaction_id = FromValueOpt::from_value(v),
155 "version" => b.version = FromValueOpt::from_value(v),
156 _ => {}
157 }
158 }
159 b.take_out()
160 }
161 }
162};
163#[derive(Clone, Eq, PartialEq)]
166#[non_exhaustive]
167pub enum ThreeDSecureDetailsAuthenticationFlow {
168 Challenge,
169 Frictionless,
170 Unknown(String),
172}
173impl ThreeDSecureDetailsAuthenticationFlow {
174 pub fn as_str(&self) -> &str {
175 use ThreeDSecureDetailsAuthenticationFlow::*;
176 match self {
177 Challenge => "challenge",
178 Frictionless => "frictionless",
179 Unknown(v) => v,
180 }
181 }
182}
183
184impl std::str::FromStr for ThreeDSecureDetailsAuthenticationFlow {
185 type Err = std::convert::Infallible;
186 fn from_str(s: &str) -> Result<Self, Self::Err> {
187 use ThreeDSecureDetailsAuthenticationFlow::*;
188 match s {
189 "challenge" => Ok(Challenge),
190 "frictionless" => Ok(Frictionless),
191 v => {
192 tracing::warn!(
193 "Unknown value '{}' for enum '{}'",
194 v,
195 "ThreeDSecureDetailsAuthenticationFlow"
196 );
197 Ok(Unknown(v.to_owned()))
198 }
199 }
200 }
201}
202impl std::fmt::Display for ThreeDSecureDetailsAuthenticationFlow {
203 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
204 f.write_str(self.as_str())
205 }
206}
207
208impl std::fmt::Debug for ThreeDSecureDetailsAuthenticationFlow {
209 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
210 f.write_str(self.as_str())
211 }
212}
213#[cfg(feature = "serialize")]
214impl serde::Serialize for ThreeDSecureDetailsAuthenticationFlow {
215 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
216 where
217 S: serde::Serializer,
218 {
219 serializer.serialize_str(self.as_str())
220 }
221}
222impl miniserde::Deserialize for ThreeDSecureDetailsAuthenticationFlow {
223 fn begin(out: &mut Option<Self>) -> &mut dyn miniserde::de::Visitor {
224 crate::Place::new(out)
225 }
226}
227
228impl miniserde::de::Visitor for crate::Place<ThreeDSecureDetailsAuthenticationFlow> {
229 fn string(&mut self, s: &str) -> miniserde::Result<()> {
230 use std::str::FromStr;
231 self.out = Some(ThreeDSecureDetailsAuthenticationFlow::from_str(s).expect("infallible"));
232 Ok(())
233 }
234}
235
236stripe_types::impl_from_val_with_from_str!(ThreeDSecureDetailsAuthenticationFlow);
237#[cfg(feature = "deserialize")]
238impl<'de> serde::Deserialize<'de> for ThreeDSecureDetailsAuthenticationFlow {
239 fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
240 use std::str::FromStr;
241 let s: std::borrow::Cow<'de, str> = serde::Deserialize::deserialize(deserializer)?;
242 Ok(Self::from_str(&s).expect("infallible"))
243 }
244}
245#[derive(Clone, Eq, PartialEq)]
248#[non_exhaustive]
249pub enum ThreeDSecureDetailsElectronicCommerceIndicator {
250 V01,
251 V02,
252 V05,
253 V06,
254 V07,
255 Unknown(String),
257}
258impl ThreeDSecureDetailsElectronicCommerceIndicator {
259 pub fn as_str(&self) -> &str {
260 use ThreeDSecureDetailsElectronicCommerceIndicator::*;
261 match self {
262 V01 => "01",
263 V02 => "02",
264 V05 => "05",
265 V06 => "06",
266 V07 => "07",
267 Unknown(v) => v,
268 }
269 }
270}
271
272impl std::str::FromStr for ThreeDSecureDetailsElectronicCommerceIndicator {
273 type Err = std::convert::Infallible;
274 fn from_str(s: &str) -> Result<Self, Self::Err> {
275 use ThreeDSecureDetailsElectronicCommerceIndicator::*;
276 match s {
277 "01" => Ok(V01),
278 "02" => Ok(V02),
279 "05" => Ok(V05),
280 "06" => Ok(V06),
281 "07" => Ok(V07),
282 v => {
283 tracing::warn!(
284 "Unknown value '{}' for enum '{}'",
285 v,
286 "ThreeDSecureDetailsElectronicCommerceIndicator"
287 );
288 Ok(Unknown(v.to_owned()))
289 }
290 }
291 }
292}
293impl std::fmt::Display for ThreeDSecureDetailsElectronicCommerceIndicator {
294 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
295 f.write_str(self.as_str())
296 }
297}
298
299impl std::fmt::Debug for ThreeDSecureDetailsElectronicCommerceIndicator {
300 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
301 f.write_str(self.as_str())
302 }
303}
304#[cfg(feature = "serialize")]
305impl serde::Serialize for ThreeDSecureDetailsElectronicCommerceIndicator {
306 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
307 where
308 S: serde::Serializer,
309 {
310 serializer.serialize_str(self.as_str())
311 }
312}
313impl miniserde::Deserialize for ThreeDSecureDetailsElectronicCommerceIndicator {
314 fn begin(out: &mut Option<Self>) -> &mut dyn miniserde::de::Visitor {
315 crate::Place::new(out)
316 }
317}
318
319impl miniserde::de::Visitor for crate::Place<ThreeDSecureDetailsElectronicCommerceIndicator> {
320 fn string(&mut self, s: &str) -> miniserde::Result<()> {
321 use std::str::FromStr;
322 self.out =
323 Some(ThreeDSecureDetailsElectronicCommerceIndicator::from_str(s).expect("infallible"));
324 Ok(())
325 }
326}
327
328stripe_types::impl_from_val_with_from_str!(ThreeDSecureDetailsElectronicCommerceIndicator);
329#[cfg(feature = "deserialize")]
330impl<'de> serde::Deserialize<'de> for ThreeDSecureDetailsElectronicCommerceIndicator {
331 fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
332 use std::str::FromStr;
333 let s: std::borrow::Cow<'de, str> = serde::Deserialize::deserialize(deserializer)?;
334 Ok(Self::from_str(&s).expect("infallible"))
335 }
336}
337#[derive(Clone, Eq, PartialEq)]
339#[non_exhaustive]
340pub enum ThreeDSecureDetailsResult {
341 AttemptAcknowledged,
342 Authenticated,
343 Exempted,
344 Failed,
345 NotSupported,
346 ProcessingError,
347 Unknown(String),
349}
350impl ThreeDSecureDetailsResult {
351 pub fn as_str(&self) -> &str {
352 use ThreeDSecureDetailsResult::*;
353 match self {
354 AttemptAcknowledged => "attempt_acknowledged",
355 Authenticated => "authenticated",
356 Exempted => "exempted",
357 Failed => "failed",
358 NotSupported => "not_supported",
359 ProcessingError => "processing_error",
360 Unknown(v) => v,
361 }
362 }
363}
364
365impl std::str::FromStr for ThreeDSecureDetailsResult {
366 type Err = std::convert::Infallible;
367 fn from_str(s: &str) -> Result<Self, Self::Err> {
368 use ThreeDSecureDetailsResult::*;
369 match s {
370 "attempt_acknowledged" => Ok(AttemptAcknowledged),
371 "authenticated" => Ok(Authenticated),
372 "exempted" => Ok(Exempted),
373 "failed" => Ok(Failed),
374 "not_supported" => Ok(NotSupported),
375 "processing_error" => Ok(ProcessingError),
376 v => {
377 tracing::warn!("Unknown value '{}' for enum '{}'", v, "ThreeDSecureDetailsResult");
378 Ok(Unknown(v.to_owned()))
379 }
380 }
381 }
382}
383impl std::fmt::Display for ThreeDSecureDetailsResult {
384 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
385 f.write_str(self.as_str())
386 }
387}
388
389impl std::fmt::Debug for ThreeDSecureDetailsResult {
390 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
391 f.write_str(self.as_str())
392 }
393}
394#[cfg(feature = "serialize")]
395impl serde::Serialize for ThreeDSecureDetailsResult {
396 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
397 where
398 S: serde::Serializer,
399 {
400 serializer.serialize_str(self.as_str())
401 }
402}
403impl miniserde::Deserialize for ThreeDSecureDetailsResult {
404 fn begin(out: &mut Option<Self>) -> &mut dyn miniserde::de::Visitor {
405 crate::Place::new(out)
406 }
407}
408
409impl miniserde::de::Visitor for crate::Place<ThreeDSecureDetailsResult> {
410 fn string(&mut self, s: &str) -> miniserde::Result<()> {
411 use std::str::FromStr;
412 self.out = Some(ThreeDSecureDetailsResult::from_str(s).expect("infallible"));
413 Ok(())
414 }
415}
416
417stripe_types::impl_from_val_with_from_str!(ThreeDSecureDetailsResult);
418#[cfg(feature = "deserialize")]
419impl<'de> serde::Deserialize<'de> for ThreeDSecureDetailsResult {
420 fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
421 use std::str::FromStr;
422 let s: std::borrow::Cow<'de, str> = serde::Deserialize::deserialize(deserializer)?;
423 Ok(Self::from_str(&s).expect("infallible"))
424 }
425}
426#[derive(Clone, Eq, PartialEq)]
429#[non_exhaustive]
430pub enum ThreeDSecureDetailsResultReason {
431 Abandoned,
432 Bypassed,
433 Canceled,
434 CardNotEnrolled,
435 NetworkNotSupported,
436 ProtocolError,
437 Rejected,
438 Unknown(String),
440}
441impl ThreeDSecureDetailsResultReason {
442 pub fn as_str(&self) -> &str {
443 use ThreeDSecureDetailsResultReason::*;
444 match self {
445 Abandoned => "abandoned",
446 Bypassed => "bypassed",
447 Canceled => "canceled",
448 CardNotEnrolled => "card_not_enrolled",
449 NetworkNotSupported => "network_not_supported",
450 ProtocolError => "protocol_error",
451 Rejected => "rejected",
452 Unknown(v) => v,
453 }
454 }
455}
456
457impl std::str::FromStr for ThreeDSecureDetailsResultReason {
458 type Err = std::convert::Infallible;
459 fn from_str(s: &str) -> Result<Self, Self::Err> {
460 use ThreeDSecureDetailsResultReason::*;
461 match s {
462 "abandoned" => Ok(Abandoned),
463 "bypassed" => Ok(Bypassed),
464 "canceled" => Ok(Canceled),
465 "card_not_enrolled" => Ok(CardNotEnrolled),
466 "network_not_supported" => Ok(NetworkNotSupported),
467 "protocol_error" => Ok(ProtocolError),
468 "rejected" => Ok(Rejected),
469 v => {
470 tracing::warn!(
471 "Unknown value '{}' for enum '{}'",
472 v,
473 "ThreeDSecureDetailsResultReason"
474 );
475 Ok(Unknown(v.to_owned()))
476 }
477 }
478 }
479}
480impl std::fmt::Display for ThreeDSecureDetailsResultReason {
481 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
482 f.write_str(self.as_str())
483 }
484}
485
486impl std::fmt::Debug for ThreeDSecureDetailsResultReason {
487 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
488 f.write_str(self.as_str())
489 }
490}
491#[cfg(feature = "serialize")]
492impl serde::Serialize for ThreeDSecureDetailsResultReason {
493 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
494 where
495 S: serde::Serializer,
496 {
497 serializer.serialize_str(self.as_str())
498 }
499}
500impl miniserde::Deserialize for ThreeDSecureDetailsResultReason {
501 fn begin(out: &mut Option<Self>) -> &mut dyn miniserde::de::Visitor {
502 crate::Place::new(out)
503 }
504}
505
506impl miniserde::de::Visitor for crate::Place<ThreeDSecureDetailsResultReason> {
507 fn string(&mut self, s: &str) -> miniserde::Result<()> {
508 use std::str::FromStr;
509 self.out = Some(ThreeDSecureDetailsResultReason::from_str(s).expect("infallible"));
510 Ok(())
511 }
512}
513
514stripe_types::impl_from_val_with_from_str!(ThreeDSecureDetailsResultReason);
515#[cfg(feature = "deserialize")]
516impl<'de> serde::Deserialize<'de> for ThreeDSecureDetailsResultReason {
517 fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
518 use std::str::FromStr;
519 let s: std::borrow::Cow<'de, str> = serde::Deserialize::deserialize(deserializer)?;
520 Ok(Self::from_str(&s).expect("infallible"))
521 }
522}
523#[derive(Clone, Eq, PartialEq)]
525#[non_exhaustive]
526pub enum ThreeDSecureDetailsVersion {
527 V1_0_2,
528 V2_1_0,
529 V2_2_0,
530 Unknown(String),
532}
533impl ThreeDSecureDetailsVersion {
534 pub fn as_str(&self) -> &str {
535 use ThreeDSecureDetailsVersion::*;
536 match self {
537 V1_0_2 => "1.0.2",
538 V2_1_0 => "2.1.0",
539 V2_2_0 => "2.2.0",
540 Unknown(v) => v,
541 }
542 }
543}
544
545impl std::str::FromStr for ThreeDSecureDetailsVersion {
546 type Err = std::convert::Infallible;
547 fn from_str(s: &str) -> Result<Self, Self::Err> {
548 use ThreeDSecureDetailsVersion::*;
549 match s {
550 "1.0.2" => Ok(V1_0_2),
551 "2.1.0" => Ok(V2_1_0),
552 "2.2.0" => Ok(V2_2_0),
553 v => {
554 tracing::warn!("Unknown value '{}' for enum '{}'", v, "ThreeDSecureDetailsVersion");
555 Ok(Unknown(v.to_owned()))
556 }
557 }
558 }
559}
560impl std::fmt::Display for ThreeDSecureDetailsVersion {
561 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
562 f.write_str(self.as_str())
563 }
564}
565
566impl std::fmt::Debug for ThreeDSecureDetailsVersion {
567 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
568 f.write_str(self.as_str())
569 }
570}
571#[cfg(feature = "serialize")]
572impl serde::Serialize for ThreeDSecureDetailsVersion {
573 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
574 where
575 S: serde::Serializer,
576 {
577 serializer.serialize_str(self.as_str())
578 }
579}
580impl miniserde::Deserialize for ThreeDSecureDetailsVersion {
581 fn begin(out: &mut Option<Self>) -> &mut dyn miniserde::de::Visitor {
582 crate::Place::new(out)
583 }
584}
585
586impl miniserde::de::Visitor for crate::Place<ThreeDSecureDetailsVersion> {
587 fn string(&mut self, s: &str) -> miniserde::Result<()> {
588 use std::str::FromStr;
589 self.out = Some(ThreeDSecureDetailsVersion::from_str(s).expect("infallible"));
590 Ok(())
591 }
592}
593
594stripe_types::impl_from_val_with_from_str!(ThreeDSecureDetailsVersion);
595#[cfg(feature = "deserialize")]
596impl<'de> serde::Deserialize<'de> for ThreeDSecureDetailsVersion {
597 fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
598 use std::str::FromStr;
599 let s: std::borrow::Cow<'de, str> = serde::Deserialize::deserialize(deserializer)?;
600 Ok(Self::from_str(&s).expect("infallible"))
601 }
602}