stripe_shared/
source_owner.rs

1#[derive(Clone, Debug)]
2#[cfg_attr(feature = "serialize", derive(serde::Serialize))]
3#[cfg_attr(feature = "deserialize", derive(serde::Deserialize))]
4pub struct SourceOwner {
5    /// Owner's address.
6    pub address: Option<stripe_shared::Address>,
7    /// Owner's email address.
8    pub email: Option<String>,
9    /// Owner's full name.
10    pub name: Option<String>,
11    /// Owner's phone number (including extension).
12    pub phone: Option<String>,
13    /// Verified owner's address.
14    /// Verified values are verified or provided by the payment method directly (and if supported) at the time of authorization or settlement.
15    /// They cannot be set or mutated.
16    pub verified_address: Option<stripe_shared::Address>,
17    /// Verified owner's email address.
18    /// Verified values are verified or provided by the payment method directly (and if supported) at the time of authorization or settlement.
19    /// They cannot be set or mutated.
20    pub verified_email: Option<String>,
21    /// Verified owner's full name.
22    /// Verified values are verified or provided by the payment method directly (and if supported) at the time of authorization or settlement.
23    /// They cannot be set or mutated.
24    pub verified_name: Option<String>,
25    /// Verified owner's phone number (including extension).
26    /// Verified values are verified or provided by the payment method directly (and if supported) at the time of authorization or settlement.
27    /// They cannot be set or mutated.
28    pub verified_phone: Option<String>,
29}
30#[doc(hidden)]
31pub struct SourceOwnerBuilder {
32    address: Option<Option<stripe_shared::Address>>,
33    email: Option<Option<String>>,
34    name: Option<Option<String>>,
35    phone: Option<Option<String>>,
36    verified_address: Option<Option<stripe_shared::Address>>,
37    verified_email: Option<Option<String>>,
38    verified_name: Option<Option<String>>,
39    verified_phone: Option<Option<String>>,
40}
41
42#[allow(
43    unused_variables,
44    irrefutable_let_patterns,
45    clippy::let_unit_value,
46    clippy::match_single_binding,
47    clippy::single_match
48)]
49const _: () = {
50    use miniserde::de::{Map, Visitor};
51    use miniserde::json::Value;
52    use miniserde::{make_place, Deserialize, Result};
53    use stripe_types::miniserde_helpers::FromValueOpt;
54    use stripe_types::{MapBuilder, ObjectDeser};
55
56    make_place!(Place);
57
58    impl Deserialize for SourceOwner {
59        fn begin(out: &mut Option<Self>) -> &mut dyn Visitor {
60            Place::new(out)
61        }
62    }
63
64    struct Builder<'a> {
65        out: &'a mut Option<SourceOwner>,
66        builder: SourceOwnerBuilder,
67    }
68
69    impl Visitor for Place<SourceOwner> {
70        fn map(&mut self) -> Result<Box<dyn Map + '_>> {
71            Ok(Box::new(Builder {
72                out: &mut self.out,
73                builder: SourceOwnerBuilder::deser_default(),
74            }))
75        }
76    }
77
78    impl MapBuilder for SourceOwnerBuilder {
79        type Out = SourceOwner;
80        fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
81            Ok(match k {
82                "address" => Deserialize::begin(&mut self.address),
83                "email" => Deserialize::begin(&mut self.email),
84                "name" => Deserialize::begin(&mut self.name),
85                "phone" => Deserialize::begin(&mut self.phone),
86                "verified_address" => Deserialize::begin(&mut self.verified_address),
87                "verified_email" => Deserialize::begin(&mut self.verified_email),
88                "verified_name" => Deserialize::begin(&mut self.verified_name),
89                "verified_phone" => Deserialize::begin(&mut self.verified_phone),
90
91                _ => <dyn Visitor>::ignore(),
92            })
93        }
94
95        fn deser_default() -> Self {
96            Self {
97                address: Deserialize::default(),
98                email: Deserialize::default(),
99                name: Deserialize::default(),
100                phone: Deserialize::default(),
101                verified_address: Deserialize::default(),
102                verified_email: Deserialize::default(),
103                verified_name: Deserialize::default(),
104                verified_phone: Deserialize::default(),
105            }
106        }
107
108        fn take_out(&mut self) -> Option<Self::Out> {
109            let (
110                Some(address),
111                Some(email),
112                Some(name),
113                Some(phone),
114                Some(verified_address),
115                Some(verified_email),
116                Some(verified_name),
117                Some(verified_phone),
118            ) = (
119                self.address.take(),
120                self.email.take(),
121                self.name.take(),
122                self.phone.take(),
123                self.verified_address.take(),
124                self.verified_email.take(),
125                self.verified_name.take(),
126                self.verified_phone.take(),
127            )
128            else {
129                return None;
130            };
131            Some(Self::Out {
132                address,
133                email,
134                name,
135                phone,
136                verified_address,
137                verified_email,
138                verified_name,
139                verified_phone,
140            })
141        }
142    }
143
144    impl<'a> Map for Builder<'a> {
145        fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
146            self.builder.key(k)
147        }
148
149        fn finish(&mut self) -> Result<()> {
150            *self.out = self.builder.take_out();
151            Ok(())
152        }
153    }
154
155    impl ObjectDeser for SourceOwner {
156        type Builder = SourceOwnerBuilder;
157    }
158
159    impl FromValueOpt for SourceOwner {
160        fn from_value(v: Value) -> Option<Self> {
161            let Value::Object(obj) = v else {
162                return None;
163            };
164            let mut b = SourceOwnerBuilder::deser_default();
165            for (k, v) in obj {
166                match k.as_str() {
167                    "address" => b.address = FromValueOpt::from_value(v),
168                    "email" => b.email = FromValueOpt::from_value(v),
169                    "name" => b.name = FromValueOpt::from_value(v),
170                    "phone" => b.phone = FromValueOpt::from_value(v),
171                    "verified_address" => b.verified_address = FromValueOpt::from_value(v),
172                    "verified_email" => b.verified_email = FromValueOpt::from_value(v),
173                    "verified_name" => b.verified_name = FromValueOpt::from_value(v),
174                    "verified_phone" => b.verified_phone = FromValueOpt::from_value(v),
175
176                    _ => {}
177                }
178            }
179            b.take_out()
180        }
181    }
182};