Skip to main content

stripe_shared/
source_owner.rs

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