stripe_shared/
issuing_cardholder_individual.rs

1#[derive(Clone, Debug)]
2#[cfg_attr(feature = "serialize", derive(serde::Serialize))]
3#[cfg_attr(feature = "deserialize", derive(serde::Deserialize))]
4pub struct IssuingCardholderIndividual {
5    /// Information related to the card_issuing program for this cardholder.
6    pub card_issuing: Option<stripe_shared::IssuingCardholderCardIssuing>,
7    /// The date of birth of this cardholder.
8    pub dob: Option<stripe_shared::IssuingCardholderIndividualDob>,
9    /// The first name of this cardholder.
10    /// Required before activating Cards.
11    /// This field cannot contain any numbers, special characters (except periods, commas, hyphens, spaces and apostrophes) or non-latin letters.
12    pub first_name: Option<String>,
13    /// The last name of this cardholder.
14    /// Required before activating Cards.
15    /// This field cannot contain any numbers, special characters (except periods, commas, hyphens, spaces and apostrophes) or non-latin letters.
16    pub last_name: Option<String>,
17    /// Government-issued ID document for this cardholder.
18    pub verification: Option<stripe_shared::IssuingCardholderVerification>,
19}
20#[doc(hidden)]
21pub struct IssuingCardholderIndividualBuilder {
22    card_issuing: Option<Option<stripe_shared::IssuingCardholderCardIssuing>>,
23    dob: Option<Option<stripe_shared::IssuingCardholderIndividualDob>>,
24    first_name: Option<Option<String>>,
25    last_name: Option<Option<String>>,
26    verification: Option<Option<stripe_shared::IssuingCardholderVerification>>,
27}
28
29#[allow(
30    unused_variables,
31    irrefutable_let_patterns,
32    clippy::let_unit_value,
33    clippy::match_single_binding,
34    clippy::single_match
35)]
36const _: () = {
37    use miniserde::de::{Map, Visitor};
38    use miniserde::json::Value;
39    use miniserde::{Deserialize, Result, make_place};
40    use stripe_types::miniserde_helpers::FromValueOpt;
41    use stripe_types::{MapBuilder, ObjectDeser};
42
43    make_place!(Place);
44
45    impl Deserialize for IssuingCardholderIndividual {
46        fn begin(out: &mut Option<Self>) -> &mut dyn Visitor {
47            Place::new(out)
48        }
49    }
50
51    struct Builder<'a> {
52        out: &'a mut Option<IssuingCardholderIndividual>,
53        builder: IssuingCardholderIndividualBuilder,
54    }
55
56    impl Visitor for Place<IssuingCardholderIndividual> {
57        fn map(&mut self) -> Result<Box<dyn Map + '_>> {
58            Ok(Box::new(Builder {
59                out: &mut self.out,
60                builder: IssuingCardholderIndividualBuilder::deser_default(),
61            }))
62        }
63    }
64
65    impl MapBuilder for IssuingCardholderIndividualBuilder {
66        type Out = IssuingCardholderIndividual;
67        fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
68            Ok(match k {
69                "card_issuing" => Deserialize::begin(&mut self.card_issuing),
70                "dob" => Deserialize::begin(&mut self.dob),
71                "first_name" => Deserialize::begin(&mut self.first_name),
72                "last_name" => Deserialize::begin(&mut self.last_name),
73                "verification" => Deserialize::begin(&mut self.verification),
74
75                _ => <dyn Visitor>::ignore(),
76            })
77        }
78
79        fn deser_default() -> Self {
80            Self {
81                card_issuing: Deserialize::default(),
82                dob: Deserialize::default(),
83                first_name: Deserialize::default(),
84                last_name: Deserialize::default(),
85                verification: Deserialize::default(),
86            }
87        }
88
89        fn take_out(&mut self) -> Option<Self::Out> {
90            let (
91                Some(card_issuing),
92                Some(dob),
93                Some(first_name),
94                Some(last_name),
95                Some(verification),
96            ) = (
97                self.card_issuing.take(),
98                self.dob,
99                self.first_name.take(),
100                self.last_name.take(),
101                self.verification.take(),
102            )
103            else {
104                return None;
105            };
106            Some(Self::Out { card_issuing, dob, first_name, last_name, verification })
107        }
108    }
109
110    impl Map for Builder<'_> {
111        fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
112            self.builder.key(k)
113        }
114
115        fn finish(&mut self) -> Result<()> {
116            *self.out = self.builder.take_out();
117            Ok(())
118        }
119    }
120
121    impl ObjectDeser for IssuingCardholderIndividual {
122        type Builder = IssuingCardholderIndividualBuilder;
123    }
124
125    impl FromValueOpt for IssuingCardholderIndividual {
126        fn from_value(v: Value) -> Option<Self> {
127            let Value::Object(obj) = v else {
128                return None;
129            };
130            let mut b = IssuingCardholderIndividualBuilder::deser_default();
131            for (k, v) in obj {
132                match k.as_str() {
133                    "card_issuing" => b.card_issuing = FromValueOpt::from_value(v),
134                    "dob" => b.dob = FromValueOpt::from_value(v),
135                    "first_name" => b.first_name = FromValueOpt::from_value(v),
136                    "last_name" => b.last_name = FromValueOpt::from_value(v),
137                    "verification" => b.verification = FromValueOpt::from_value(v),
138
139                    _ => {}
140                }
141            }
142            b.take_out()
143        }
144    }
145};