1#[derive(Clone, Debug)]
2#[cfg_attr(feature = "serialize", derive(serde::Serialize))]
3#[cfg_attr(feature = "deserialize", derive(serde::Deserialize))]
4pub struct AccountRequirements {
5 pub alternatives: Option<Vec<stripe_shared::AccountRequirementsAlternative>>,
9 pub current_deadline: Option<stripe_types::Timestamp>,
12 pub currently_due: Option<Vec<String>>,
15 pub disabled_reason: Option<AccountRequirementsDisabledReason>,
18 pub errors: Option<Vec<stripe_shared::AccountRequirementsError>>,
20 pub eventually_due: Option<Vec<String>>,
23 pub past_due: Option<Vec<String>>,
26 pub pending_verification: Option<Vec<String>>,
30}
31#[doc(hidden)]
32pub struct AccountRequirementsBuilder {
33 alternatives: Option<Option<Vec<stripe_shared::AccountRequirementsAlternative>>>,
34 current_deadline: Option<Option<stripe_types::Timestamp>>,
35 currently_due: Option<Option<Vec<String>>>,
36 disabled_reason: Option<Option<AccountRequirementsDisabledReason>>,
37 errors: Option<Option<Vec<stripe_shared::AccountRequirementsError>>>,
38 eventually_due: Option<Option<Vec<String>>>,
39 past_due: Option<Option<Vec<String>>>,
40 pending_verification: Option<Option<Vec<String>>>,
41}
42
43#[allow(
44 unused_variables,
45 irrefutable_let_patterns,
46 clippy::let_unit_value,
47 clippy::match_single_binding,
48 clippy::single_match
49)]
50const _: () = {
51 use miniserde::de::{Map, Visitor};
52 use miniserde::json::Value;
53 use miniserde::{Deserialize, Result, make_place};
54 use stripe_types::miniserde_helpers::FromValueOpt;
55 use stripe_types::{MapBuilder, ObjectDeser};
56
57 make_place!(Place);
58
59 impl Deserialize for AccountRequirements {
60 fn begin(out: &mut Option<Self>) -> &mut dyn Visitor {
61 Place::new(out)
62 }
63 }
64
65 struct Builder<'a> {
66 out: &'a mut Option<AccountRequirements>,
67 builder: AccountRequirementsBuilder,
68 }
69
70 impl Visitor for Place<AccountRequirements> {
71 fn map(&mut self) -> Result<Box<dyn Map + '_>> {
72 Ok(Box::new(Builder {
73 out: &mut self.out,
74 builder: AccountRequirementsBuilder::deser_default(),
75 }))
76 }
77 }
78
79 impl MapBuilder for AccountRequirementsBuilder {
80 type Out = AccountRequirements;
81 fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
82 Ok(match k {
83 "alternatives" => Deserialize::begin(&mut self.alternatives),
84 "current_deadline" => Deserialize::begin(&mut self.current_deadline),
85 "currently_due" => Deserialize::begin(&mut self.currently_due),
86 "disabled_reason" => Deserialize::begin(&mut self.disabled_reason),
87 "errors" => Deserialize::begin(&mut self.errors),
88 "eventually_due" => Deserialize::begin(&mut self.eventually_due),
89 "past_due" => Deserialize::begin(&mut self.past_due),
90 "pending_verification" => Deserialize::begin(&mut self.pending_verification),
91 _ => <dyn Visitor>::ignore(),
92 })
93 }
94
95 fn deser_default() -> Self {
96 Self {
97 alternatives: Deserialize::default(),
98 current_deadline: Deserialize::default(),
99 currently_due: Deserialize::default(),
100 disabled_reason: Deserialize::default(),
101 errors: Deserialize::default(),
102 eventually_due: Deserialize::default(),
103 past_due: Deserialize::default(),
104 pending_verification: Deserialize::default(),
105 }
106 }
107
108 fn take_out(&mut self) -> Option<Self::Out> {
109 let (
110 Some(alternatives),
111 Some(current_deadline),
112 Some(currently_due),
113 Some(disabled_reason),
114 Some(errors),
115 Some(eventually_due),
116 Some(past_due),
117 Some(pending_verification),
118 ) = (
119 self.alternatives.take(),
120 self.current_deadline,
121 self.currently_due.take(),
122 self.disabled_reason.take(),
123 self.errors.take(),
124 self.eventually_due.take(),
125 self.past_due.take(),
126 self.pending_verification.take(),
127 )
128 else {
129 return None;
130 };
131 Some(Self::Out {
132 alternatives,
133 current_deadline,
134 currently_due,
135 disabled_reason,
136 errors,
137 eventually_due,
138 past_due,
139 pending_verification,
140 })
141 }
142 }
143
144 impl Map for Builder<'_> {
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 AccountRequirements {
156 type Builder = AccountRequirementsBuilder;
157 }
158
159 impl FromValueOpt for AccountRequirements {
160 fn from_value(v: Value) -> Option<Self> {
161 let Value::Object(obj) = v else {
162 return None;
163 };
164 let mut b = AccountRequirementsBuilder::deser_default();
165 for (k, v) in obj {
166 match k.as_str() {
167 "alternatives" => b.alternatives = FromValueOpt::from_value(v),
168 "current_deadline" => b.current_deadline = FromValueOpt::from_value(v),
169 "currently_due" => b.currently_due = FromValueOpt::from_value(v),
170 "disabled_reason" => b.disabled_reason = FromValueOpt::from_value(v),
171 "errors" => b.errors = FromValueOpt::from_value(v),
172 "eventually_due" => b.eventually_due = FromValueOpt::from_value(v),
173 "past_due" => b.past_due = FromValueOpt::from_value(v),
174 "pending_verification" => b.pending_verification = FromValueOpt::from_value(v),
175 _ => {}
176 }
177 }
178 b.take_out()
179 }
180 }
181};
182#[derive(Clone, Eq, PartialEq)]
185#[non_exhaustive]
186pub enum AccountRequirementsDisabledReason {
187 ActionRequiredRequestedCapabilities,
188 Listed,
189 Other,
190 PlatformPaused,
191 RejectedFraud,
192 RejectedIncompleteVerification,
193 RejectedListed,
194 RejectedOther,
195 RejectedPlatformFraud,
196 RejectedPlatformOther,
197 RejectedPlatformTermsOfService,
198 RejectedTermsOfService,
199 RequirementsPastDue,
200 RequirementsPendingVerification,
201 UnderReview,
202 Unknown(String),
204}
205impl AccountRequirementsDisabledReason {
206 pub fn as_str(&self) -> &str {
207 use AccountRequirementsDisabledReason::*;
208 match self {
209 ActionRequiredRequestedCapabilities => "action_required.requested_capabilities",
210 Listed => "listed",
211 Other => "other",
212 PlatformPaused => "platform_paused",
213 RejectedFraud => "rejected.fraud",
214 RejectedIncompleteVerification => "rejected.incomplete_verification",
215 RejectedListed => "rejected.listed",
216 RejectedOther => "rejected.other",
217 RejectedPlatformFraud => "rejected.platform_fraud",
218 RejectedPlatformOther => "rejected.platform_other",
219 RejectedPlatformTermsOfService => "rejected.platform_terms_of_service",
220 RejectedTermsOfService => "rejected.terms_of_service",
221 RequirementsPastDue => "requirements.past_due",
222 RequirementsPendingVerification => "requirements.pending_verification",
223 UnderReview => "under_review",
224 Unknown(v) => v,
225 }
226 }
227}
228
229impl std::str::FromStr for AccountRequirementsDisabledReason {
230 type Err = std::convert::Infallible;
231 fn from_str(s: &str) -> Result<Self, Self::Err> {
232 use AccountRequirementsDisabledReason::*;
233 match s {
234 "action_required.requested_capabilities" => Ok(ActionRequiredRequestedCapabilities),
235 "listed" => Ok(Listed),
236 "other" => Ok(Other),
237 "platform_paused" => Ok(PlatformPaused),
238 "rejected.fraud" => Ok(RejectedFraud),
239 "rejected.incomplete_verification" => Ok(RejectedIncompleteVerification),
240 "rejected.listed" => Ok(RejectedListed),
241 "rejected.other" => Ok(RejectedOther),
242 "rejected.platform_fraud" => Ok(RejectedPlatformFraud),
243 "rejected.platform_other" => Ok(RejectedPlatformOther),
244 "rejected.platform_terms_of_service" => Ok(RejectedPlatformTermsOfService),
245 "rejected.terms_of_service" => Ok(RejectedTermsOfService),
246 "requirements.past_due" => Ok(RequirementsPastDue),
247 "requirements.pending_verification" => Ok(RequirementsPendingVerification),
248 "under_review" => Ok(UnderReview),
249 v => {
250 tracing::warn!(
251 "Unknown value '{}' for enum '{}'",
252 v,
253 "AccountRequirementsDisabledReason"
254 );
255 Ok(Unknown(v.to_owned()))
256 }
257 }
258 }
259}
260impl std::fmt::Display for AccountRequirementsDisabledReason {
261 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
262 f.write_str(self.as_str())
263 }
264}
265
266impl std::fmt::Debug for AccountRequirementsDisabledReason {
267 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
268 f.write_str(self.as_str())
269 }
270}
271#[cfg(feature = "serialize")]
272impl serde::Serialize for AccountRequirementsDisabledReason {
273 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
274 where
275 S: serde::Serializer,
276 {
277 serializer.serialize_str(self.as_str())
278 }
279}
280impl miniserde::Deserialize for AccountRequirementsDisabledReason {
281 fn begin(out: &mut Option<Self>) -> &mut dyn miniserde::de::Visitor {
282 crate::Place::new(out)
283 }
284}
285
286impl miniserde::de::Visitor for crate::Place<AccountRequirementsDisabledReason> {
287 fn string(&mut self, s: &str) -> miniserde::Result<()> {
288 use std::str::FromStr;
289 self.out = Some(AccountRequirementsDisabledReason::from_str(s).expect("infallible"));
290 Ok(())
291 }
292}
293
294stripe_types::impl_from_val_with_from_str!(AccountRequirementsDisabledReason);
295#[cfg(feature = "deserialize")]
296impl<'de> serde::Deserialize<'de> for AccountRequirementsDisabledReason {
297 fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
298 use std::str::FromStr;
299 let s: std::borrow::Cow<'de, str> = serde::Deserialize::deserialize(deserializer)?;
300 Ok(Self::from_str(&s).expect("infallible"))
301 }
302}