1#[derive(Clone, Debug)]
5#[cfg_attr(feature = "deserialize", derive(serde::Deserialize))]
6pub struct Mandate {
7 pub customer_acceptance: stripe_shared::CustomerAcceptance,
8 pub id: stripe_shared::MandateId,
10 pub livemode: bool,
12 pub multi_use: Option<stripe_shared::MandateMultiUse>,
13 pub on_behalf_of: Option<String>,
15 pub payment_method: stripe_types::Expandable<stripe_shared::PaymentMethod>,
17 pub payment_method_details: stripe_shared::MandatePaymentMethodDetails,
18 pub single_use: Option<stripe_shared::MandateSingleUse>,
19 pub status: MandateStatus,
21 #[cfg_attr(feature = "deserialize", serde(rename = "type"))]
23 pub type_: MandateType,
24}
25#[doc(hidden)]
26pub struct MandateBuilder {
27 customer_acceptance: Option<stripe_shared::CustomerAcceptance>,
28 id: Option<stripe_shared::MandateId>,
29 livemode: Option<bool>,
30 multi_use: Option<Option<stripe_shared::MandateMultiUse>>,
31 on_behalf_of: Option<Option<String>>,
32 payment_method: Option<stripe_types::Expandable<stripe_shared::PaymentMethod>>,
33 payment_method_details: Option<stripe_shared::MandatePaymentMethodDetails>,
34 single_use: Option<Option<stripe_shared::MandateSingleUse>>,
35 status: Option<MandateStatus>,
36 type_: Option<MandateType>,
37}
38
39#[allow(
40 unused_variables,
41 irrefutable_let_patterns,
42 clippy::let_unit_value,
43 clippy::match_single_binding,
44 clippy::single_match
45)]
46const _: () = {
47 use miniserde::de::{Map, Visitor};
48 use miniserde::json::Value;
49 use miniserde::{make_place, Deserialize, Result};
50 use stripe_types::miniserde_helpers::FromValueOpt;
51 use stripe_types::{MapBuilder, ObjectDeser};
52
53 make_place!(Place);
54
55 impl Deserialize for Mandate {
56 fn begin(out: &mut Option<Self>) -> &mut dyn Visitor {
57 Place::new(out)
58 }
59 }
60
61 struct Builder<'a> {
62 out: &'a mut Option<Mandate>,
63 builder: MandateBuilder,
64 }
65
66 impl Visitor for Place<Mandate> {
67 fn map(&mut self) -> Result<Box<dyn Map + '_>> {
68 Ok(Box::new(Builder { out: &mut self.out, builder: MandateBuilder::deser_default() }))
69 }
70 }
71
72 impl MapBuilder for MandateBuilder {
73 type Out = Mandate;
74 fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
75 Ok(match k {
76 "customer_acceptance" => Deserialize::begin(&mut self.customer_acceptance),
77 "id" => Deserialize::begin(&mut self.id),
78 "livemode" => Deserialize::begin(&mut self.livemode),
79 "multi_use" => Deserialize::begin(&mut self.multi_use),
80 "on_behalf_of" => Deserialize::begin(&mut self.on_behalf_of),
81 "payment_method" => Deserialize::begin(&mut self.payment_method),
82 "payment_method_details" => Deserialize::begin(&mut self.payment_method_details),
83 "single_use" => Deserialize::begin(&mut self.single_use),
84 "status" => Deserialize::begin(&mut self.status),
85 "type" => Deserialize::begin(&mut self.type_),
86
87 _ => <dyn Visitor>::ignore(),
88 })
89 }
90
91 fn deser_default() -> Self {
92 Self {
93 customer_acceptance: Deserialize::default(),
94 id: Deserialize::default(),
95 livemode: Deserialize::default(),
96 multi_use: Deserialize::default(),
97 on_behalf_of: Deserialize::default(),
98 payment_method: Deserialize::default(),
99 payment_method_details: Deserialize::default(),
100 single_use: Deserialize::default(),
101 status: Deserialize::default(),
102 type_: Deserialize::default(),
103 }
104 }
105
106 fn take_out(&mut self) -> Option<Self::Out> {
107 let (
108 Some(customer_acceptance),
109 Some(id),
110 Some(livemode),
111 Some(multi_use),
112 Some(on_behalf_of),
113 Some(payment_method),
114 Some(payment_method_details),
115 Some(single_use),
116 Some(status),
117 Some(type_),
118 ) = (
119 self.customer_acceptance.take(),
120 self.id.take(),
121 self.livemode,
122 self.multi_use,
123 self.on_behalf_of.take(),
124 self.payment_method.take(),
125 self.payment_method_details.take(),
126 self.single_use.take(),
127 self.status,
128 self.type_,
129 )
130 else {
131 return None;
132 };
133 Some(Self::Out {
134 customer_acceptance,
135 id,
136 livemode,
137 multi_use,
138 on_behalf_of,
139 payment_method,
140 payment_method_details,
141 single_use,
142 status,
143 type_,
144 })
145 }
146 }
147
148 impl Map for Builder<'_> {
149 fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
150 self.builder.key(k)
151 }
152
153 fn finish(&mut self) -> Result<()> {
154 *self.out = self.builder.take_out();
155 Ok(())
156 }
157 }
158
159 impl ObjectDeser for Mandate {
160 type Builder = MandateBuilder;
161 }
162
163 impl FromValueOpt for Mandate {
164 fn from_value(v: Value) -> Option<Self> {
165 let Value::Object(obj) = v else {
166 return None;
167 };
168 let mut b = MandateBuilder::deser_default();
169 for (k, v) in obj {
170 match k.as_str() {
171 "customer_acceptance" => b.customer_acceptance = FromValueOpt::from_value(v),
172 "id" => b.id = FromValueOpt::from_value(v),
173 "livemode" => b.livemode = FromValueOpt::from_value(v),
174 "multi_use" => b.multi_use = FromValueOpt::from_value(v),
175 "on_behalf_of" => b.on_behalf_of = FromValueOpt::from_value(v),
176 "payment_method" => b.payment_method = FromValueOpt::from_value(v),
177 "payment_method_details" => {
178 b.payment_method_details = FromValueOpt::from_value(v)
179 }
180 "single_use" => b.single_use = FromValueOpt::from_value(v),
181 "status" => b.status = FromValueOpt::from_value(v),
182 "type" => b.type_ = FromValueOpt::from_value(v),
183
184 _ => {}
185 }
186 }
187 b.take_out()
188 }
189 }
190};
191#[cfg(feature = "serialize")]
192impl serde::Serialize for Mandate {
193 fn serialize<S: serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
194 use serde::ser::SerializeStruct;
195 let mut s = s.serialize_struct("Mandate", 11)?;
196 s.serialize_field("customer_acceptance", &self.customer_acceptance)?;
197 s.serialize_field("id", &self.id)?;
198 s.serialize_field("livemode", &self.livemode)?;
199 s.serialize_field("multi_use", &self.multi_use)?;
200 s.serialize_field("on_behalf_of", &self.on_behalf_of)?;
201 s.serialize_field("payment_method", &self.payment_method)?;
202 s.serialize_field("payment_method_details", &self.payment_method_details)?;
203 s.serialize_field("single_use", &self.single_use)?;
204 s.serialize_field("status", &self.status)?;
205 s.serialize_field("type", &self.type_)?;
206
207 s.serialize_field("object", "mandate")?;
208 s.end()
209 }
210}
211#[derive(Copy, Clone, Eq, PartialEq)]
213pub enum MandateStatus {
214 Active,
215 Inactive,
216 Pending,
217}
218impl MandateStatus {
219 pub fn as_str(self) -> &'static str {
220 use MandateStatus::*;
221 match self {
222 Active => "active",
223 Inactive => "inactive",
224 Pending => "pending",
225 }
226 }
227}
228
229impl std::str::FromStr for MandateStatus {
230 type Err = stripe_types::StripeParseError;
231 fn from_str(s: &str) -> Result<Self, Self::Err> {
232 use MandateStatus::*;
233 match s {
234 "active" => Ok(Active),
235 "inactive" => Ok(Inactive),
236 "pending" => Ok(Pending),
237 _ => Err(stripe_types::StripeParseError),
238 }
239 }
240}
241impl std::fmt::Display for MandateStatus {
242 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
243 f.write_str(self.as_str())
244 }
245}
246
247impl std::fmt::Debug for MandateStatus {
248 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
249 f.write_str(self.as_str())
250 }
251}
252#[cfg(feature = "serialize")]
253impl serde::Serialize for MandateStatus {
254 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
255 where
256 S: serde::Serializer,
257 {
258 serializer.serialize_str(self.as_str())
259 }
260}
261impl miniserde::Deserialize for MandateStatus {
262 fn begin(out: &mut Option<Self>) -> &mut dyn miniserde::de::Visitor {
263 crate::Place::new(out)
264 }
265}
266
267impl miniserde::de::Visitor for crate::Place<MandateStatus> {
268 fn string(&mut self, s: &str) -> miniserde::Result<()> {
269 use std::str::FromStr;
270 self.out = Some(MandateStatus::from_str(s).map_err(|_| miniserde::Error)?);
271 Ok(())
272 }
273}
274
275stripe_types::impl_from_val_with_from_str!(MandateStatus);
276#[cfg(feature = "deserialize")]
277impl<'de> serde::Deserialize<'de> for MandateStatus {
278 fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
279 use std::str::FromStr;
280 let s: std::borrow::Cow<'de, str> = serde::Deserialize::deserialize(deserializer)?;
281 Self::from_str(&s).map_err(|_| serde::de::Error::custom("Unknown value for MandateStatus"))
282 }
283}
284#[derive(Copy, Clone, Eq, PartialEq)]
286pub enum MandateType {
287 MultiUse,
288 SingleUse,
289}
290impl MandateType {
291 pub fn as_str(self) -> &'static str {
292 use MandateType::*;
293 match self {
294 MultiUse => "multi_use",
295 SingleUse => "single_use",
296 }
297 }
298}
299
300impl std::str::FromStr for MandateType {
301 type Err = stripe_types::StripeParseError;
302 fn from_str(s: &str) -> Result<Self, Self::Err> {
303 use MandateType::*;
304 match s {
305 "multi_use" => Ok(MultiUse),
306 "single_use" => Ok(SingleUse),
307 _ => Err(stripe_types::StripeParseError),
308 }
309 }
310}
311impl std::fmt::Display for MandateType {
312 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
313 f.write_str(self.as_str())
314 }
315}
316
317impl std::fmt::Debug for MandateType {
318 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
319 f.write_str(self.as_str())
320 }
321}
322#[cfg(feature = "serialize")]
323impl serde::Serialize for MandateType {
324 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
325 where
326 S: serde::Serializer,
327 {
328 serializer.serialize_str(self.as_str())
329 }
330}
331impl miniserde::Deserialize for MandateType {
332 fn begin(out: &mut Option<Self>) -> &mut dyn miniserde::de::Visitor {
333 crate::Place::new(out)
334 }
335}
336
337impl miniserde::de::Visitor for crate::Place<MandateType> {
338 fn string(&mut self, s: &str) -> miniserde::Result<()> {
339 use std::str::FromStr;
340 self.out = Some(MandateType::from_str(s).map_err(|_| miniserde::Error)?);
341 Ok(())
342 }
343}
344
345stripe_types::impl_from_val_with_from_str!(MandateType);
346#[cfg(feature = "deserialize")]
347impl<'de> serde::Deserialize<'de> for MandateType {
348 fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
349 use std::str::FromStr;
350 let s: std::borrow::Cow<'de, str> = serde::Deserialize::deserialize(deserializer)?;
351 Self::from_str(&s).map_err(|_| serde::de::Error::custom("Unknown value for MandateType"))
352 }
353}
354impl stripe_types::Object for Mandate {
355 type Id = stripe_shared::MandateId;
356 fn id(&self) -> &Self::Id {
357 &self.id
358 }
359
360 fn into_id(self) -> Self::Id {
361 self.id
362 }
363}
364stripe_types::def_id!(MandateId);