1#[derive(Clone, Debug)]
7#[cfg_attr(feature = "deserialize", derive(serde::Deserialize))]
8pub struct SubscriptionSchedule {
9 pub application: Option<stripe_types::Expandable<stripe_shared::Application>>,
11 pub billing_mode: stripe_shared::SubscriptionsResourceBillingMode,
12 pub canceled_at: Option<stripe_types::Timestamp>,
14 pub completed_at: Option<stripe_types::Timestamp>,
16 pub created: stripe_types::Timestamp,
18 pub current_phase: Option<stripe_shared::SubscriptionScheduleCurrentPhase>,
20 pub customer: stripe_types::Expandable<stripe_shared::Customer>,
22 pub customer_account: Option<String>,
24 pub default_settings: stripe_shared::SubscriptionSchedulesResourceDefaultSettings,
25 pub end_behavior: stripe_shared::SubscriptionScheduleEndBehavior,
30 pub id: stripe_shared::SubscriptionScheduleId,
32 pub livemode: bool,
34 pub metadata: Option<std::collections::HashMap<String, String>>,
37 pub phases: Vec<stripe_shared::SubscriptionSchedulePhaseConfiguration>,
39 pub released_at: Option<stripe_types::Timestamp>,
41 pub released_subscription: Option<String>,
43 pub status: SubscriptionScheduleStatus,
47 pub subscription: Option<stripe_types::Expandable<stripe_shared::Subscription>>,
49 pub test_clock: Option<stripe_types::Expandable<stripe_shared::TestHelpersTestClock>>,
51}
52#[doc(hidden)]
53pub struct SubscriptionScheduleBuilder {
54 application: Option<Option<stripe_types::Expandable<stripe_shared::Application>>>,
55 billing_mode: Option<stripe_shared::SubscriptionsResourceBillingMode>,
56 canceled_at: Option<Option<stripe_types::Timestamp>>,
57 completed_at: Option<Option<stripe_types::Timestamp>>,
58 created: Option<stripe_types::Timestamp>,
59 current_phase: Option<Option<stripe_shared::SubscriptionScheduleCurrentPhase>>,
60 customer: Option<stripe_types::Expandable<stripe_shared::Customer>>,
61 customer_account: Option<Option<String>>,
62 default_settings: Option<stripe_shared::SubscriptionSchedulesResourceDefaultSettings>,
63 end_behavior: Option<stripe_shared::SubscriptionScheduleEndBehavior>,
64 id: Option<stripe_shared::SubscriptionScheduleId>,
65 livemode: Option<bool>,
66 metadata: Option<Option<std::collections::HashMap<String, String>>>,
67 phases: Option<Vec<stripe_shared::SubscriptionSchedulePhaseConfiguration>>,
68 released_at: Option<Option<stripe_types::Timestamp>>,
69 released_subscription: Option<Option<String>>,
70 status: Option<SubscriptionScheduleStatus>,
71 subscription: Option<Option<stripe_types::Expandable<stripe_shared::Subscription>>>,
72 test_clock: Option<Option<stripe_types::Expandable<stripe_shared::TestHelpersTestClock>>>,
73}
74
75#[allow(
76 unused_variables,
77 irrefutable_let_patterns,
78 clippy::let_unit_value,
79 clippy::match_single_binding,
80 clippy::single_match
81)]
82const _: () = {
83 use miniserde::de::{Map, Visitor};
84 use miniserde::json::Value;
85 use miniserde::{Deserialize, Result, make_place};
86 use stripe_types::miniserde_helpers::FromValueOpt;
87 use stripe_types::{MapBuilder, ObjectDeser};
88
89 make_place!(Place);
90
91 impl Deserialize for SubscriptionSchedule {
92 fn begin(out: &mut Option<Self>) -> &mut dyn Visitor {
93 Place::new(out)
94 }
95 }
96
97 struct Builder<'a> {
98 out: &'a mut Option<SubscriptionSchedule>,
99 builder: SubscriptionScheduleBuilder,
100 }
101
102 impl Visitor for Place<SubscriptionSchedule> {
103 fn map(&mut self) -> Result<Box<dyn Map + '_>> {
104 Ok(Box::new(Builder {
105 out: &mut self.out,
106 builder: SubscriptionScheduleBuilder::deser_default(),
107 }))
108 }
109 }
110
111 impl MapBuilder for SubscriptionScheduleBuilder {
112 type Out = SubscriptionSchedule;
113 fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
114 Ok(match k {
115 "application" => Deserialize::begin(&mut self.application),
116 "billing_mode" => Deserialize::begin(&mut self.billing_mode),
117 "canceled_at" => Deserialize::begin(&mut self.canceled_at),
118 "completed_at" => Deserialize::begin(&mut self.completed_at),
119 "created" => Deserialize::begin(&mut self.created),
120 "current_phase" => Deserialize::begin(&mut self.current_phase),
121 "customer" => Deserialize::begin(&mut self.customer),
122 "customer_account" => Deserialize::begin(&mut self.customer_account),
123 "default_settings" => Deserialize::begin(&mut self.default_settings),
124 "end_behavior" => Deserialize::begin(&mut self.end_behavior),
125 "id" => Deserialize::begin(&mut self.id),
126 "livemode" => Deserialize::begin(&mut self.livemode),
127 "metadata" => Deserialize::begin(&mut self.metadata),
128 "phases" => Deserialize::begin(&mut self.phases),
129 "released_at" => Deserialize::begin(&mut self.released_at),
130 "released_subscription" => Deserialize::begin(&mut self.released_subscription),
131 "status" => Deserialize::begin(&mut self.status),
132 "subscription" => Deserialize::begin(&mut self.subscription),
133 "test_clock" => Deserialize::begin(&mut self.test_clock),
134 _ => <dyn Visitor>::ignore(),
135 })
136 }
137
138 fn deser_default() -> Self {
139 Self {
140 application: Deserialize::default(),
141 billing_mode: Deserialize::default(),
142 canceled_at: Deserialize::default(),
143 completed_at: Deserialize::default(),
144 created: Deserialize::default(),
145 current_phase: Deserialize::default(),
146 customer: Deserialize::default(),
147 customer_account: Deserialize::default(),
148 default_settings: Deserialize::default(),
149 end_behavior: Deserialize::default(),
150 id: Deserialize::default(),
151 livemode: Deserialize::default(),
152 metadata: Deserialize::default(),
153 phases: Deserialize::default(),
154 released_at: Deserialize::default(),
155 released_subscription: Deserialize::default(),
156 status: Deserialize::default(),
157 subscription: Deserialize::default(),
158 test_clock: Deserialize::default(),
159 }
160 }
161
162 fn take_out(&mut self) -> Option<Self::Out> {
163 let (
164 Some(application),
165 Some(billing_mode),
166 Some(canceled_at),
167 Some(completed_at),
168 Some(created),
169 Some(current_phase),
170 Some(customer),
171 Some(customer_account),
172 Some(default_settings),
173 Some(end_behavior),
174 Some(id),
175 Some(livemode),
176 Some(metadata),
177 Some(phases),
178 Some(released_at),
179 Some(released_subscription),
180 Some(status),
181 Some(subscription),
182 Some(test_clock),
183 ) = (
184 self.application.take(),
185 self.billing_mode.take(),
186 self.canceled_at,
187 self.completed_at,
188 self.created,
189 self.current_phase,
190 self.customer.take(),
191 self.customer_account.take(),
192 self.default_settings.take(),
193 self.end_behavior.take(),
194 self.id.take(),
195 self.livemode,
196 self.metadata.take(),
197 self.phases.take(),
198 self.released_at,
199 self.released_subscription.take(),
200 self.status.take(),
201 self.subscription.take(),
202 self.test_clock.take(),
203 )
204 else {
205 return None;
206 };
207 Some(Self::Out {
208 application,
209 billing_mode,
210 canceled_at,
211 completed_at,
212 created,
213 current_phase,
214 customer,
215 customer_account,
216 default_settings,
217 end_behavior,
218 id,
219 livemode,
220 metadata,
221 phases,
222 released_at,
223 released_subscription,
224 status,
225 subscription,
226 test_clock,
227 })
228 }
229 }
230
231 impl Map for Builder<'_> {
232 fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
233 self.builder.key(k)
234 }
235
236 fn finish(&mut self) -> Result<()> {
237 *self.out = self.builder.take_out();
238 Ok(())
239 }
240 }
241
242 impl ObjectDeser for SubscriptionSchedule {
243 type Builder = SubscriptionScheduleBuilder;
244 }
245
246 impl FromValueOpt for SubscriptionSchedule {
247 fn from_value(v: Value) -> Option<Self> {
248 let Value::Object(obj) = v else {
249 return None;
250 };
251 let mut b = SubscriptionScheduleBuilder::deser_default();
252 for (k, v) in obj {
253 match k.as_str() {
254 "application" => b.application = FromValueOpt::from_value(v),
255 "billing_mode" => b.billing_mode = FromValueOpt::from_value(v),
256 "canceled_at" => b.canceled_at = FromValueOpt::from_value(v),
257 "completed_at" => b.completed_at = FromValueOpt::from_value(v),
258 "created" => b.created = FromValueOpt::from_value(v),
259 "current_phase" => b.current_phase = FromValueOpt::from_value(v),
260 "customer" => b.customer = FromValueOpt::from_value(v),
261 "customer_account" => b.customer_account = FromValueOpt::from_value(v),
262 "default_settings" => b.default_settings = FromValueOpt::from_value(v),
263 "end_behavior" => b.end_behavior = FromValueOpt::from_value(v),
264 "id" => b.id = FromValueOpt::from_value(v),
265 "livemode" => b.livemode = FromValueOpt::from_value(v),
266 "metadata" => b.metadata = FromValueOpt::from_value(v),
267 "phases" => b.phases = FromValueOpt::from_value(v),
268 "released_at" => b.released_at = FromValueOpt::from_value(v),
269 "released_subscription" => {
270 b.released_subscription = FromValueOpt::from_value(v)
271 }
272 "status" => b.status = FromValueOpt::from_value(v),
273 "subscription" => b.subscription = FromValueOpt::from_value(v),
274 "test_clock" => b.test_clock = FromValueOpt::from_value(v),
275 _ => {}
276 }
277 }
278 b.take_out()
279 }
280 }
281};
282#[cfg(feature = "serialize")]
283impl serde::Serialize for SubscriptionSchedule {
284 fn serialize<S: serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
285 use serde::ser::SerializeStruct;
286 let mut s = s.serialize_struct("SubscriptionSchedule", 20)?;
287 s.serialize_field("application", &self.application)?;
288 s.serialize_field("billing_mode", &self.billing_mode)?;
289 s.serialize_field("canceled_at", &self.canceled_at)?;
290 s.serialize_field("completed_at", &self.completed_at)?;
291 s.serialize_field("created", &self.created)?;
292 s.serialize_field("current_phase", &self.current_phase)?;
293 s.serialize_field("customer", &self.customer)?;
294 s.serialize_field("customer_account", &self.customer_account)?;
295 s.serialize_field("default_settings", &self.default_settings)?;
296 s.serialize_field("end_behavior", &self.end_behavior)?;
297 s.serialize_field("id", &self.id)?;
298 s.serialize_field("livemode", &self.livemode)?;
299 s.serialize_field("metadata", &self.metadata)?;
300 s.serialize_field("phases", &self.phases)?;
301 s.serialize_field("released_at", &self.released_at)?;
302 s.serialize_field("released_subscription", &self.released_subscription)?;
303 s.serialize_field("status", &self.status)?;
304 s.serialize_field("subscription", &self.subscription)?;
305 s.serialize_field("test_clock", &self.test_clock)?;
306
307 s.serialize_field("object", "subscription_schedule")?;
308 s.end()
309 }
310}
311#[derive(Clone, Eq, PartialEq)]
315#[non_exhaustive]
316pub enum SubscriptionScheduleStatus {
317 Active,
318 Canceled,
319 Completed,
320 NotStarted,
321 Released,
322 Unknown(String),
324}
325impl SubscriptionScheduleStatus {
326 pub fn as_str(&self) -> &str {
327 use SubscriptionScheduleStatus::*;
328 match self {
329 Active => "active",
330 Canceled => "canceled",
331 Completed => "completed",
332 NotStarted => "not_started",
333 Released => "released",
334 Unknown(v) => v,
335 }
336 }
337}
338
339impl std::str::FromStr for SubscriptionScheduleStatus {
340 type Err = std::convert::Infallible;
341 fn from_str(s: &str) -> Result<Self, Self::Err> {
342 use SubscriptionScheduleStatus::*;
343 match s {
344 "active" => Ok(Active),
345 "canceled" => Ok(Canceled),
346 "completed" => Ok(Completed),
347 "not_started" => Ok(NotStarted),
348 "released" => Ok(Released),
349 v => {
350 tracing::warn!("Unknown value '{}' for enum '{}'", v, "SubscriptionScheduleStatus");
351 Ok(Unknown(v.to_owned()))
352 }
353 }
354 }
355}
356impl std::fmt::Display for SubscriptionScheduleStatus {
357 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
358 f.write_str(self.as_str())
359 }
360}
361
362impl std::fmt::Debug for SubscriptionScheduleStatus {
363 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
364 f.write_str(self.as_str())
365 }
366}
367#[cfg(feature = "serialize")]
368impl serde::Serialize for SubscriptionScheduleStatus {
369 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
370 where
371 S: serde::Serializer,
372 {
373 serializer.serialize_str(self.as_str())
374 }
375}
376impl miniserde::Deserialize for SubscriptionScheduleStatus {
377 fn begin(out: &mut Option<Self>) -> &mut dyn miniserde::de::Visitor {
378 crate::Place::new(out)
379 }
380}
381
382impl miniserde::de::Visitor for crate::Place<SubscriptionScheduleStatus> {
383 fn string(&mut self, s: &str) -> miniserde::Result<()> {
384 use std::str::FromStr;
385 self.out = Some(SubscriptionScheduleStatus::from_str(s).expect("infallible"));
386 Ok(())
387 }
388}
389
390stripe_types::impl_from_val_with_from_str!(SubscriptionScheduleStatus);
391#[cfg(feature = "deserialize")]
392impl<'de> serde::Deserialize<'de> for SubscriptionScheduleStatus {
393 fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
394 use std::str::FromStr;
395 let s: std::borrow::Cow<'de, str> = serde::Deserialize::deserialize(deserializer)?;
396 Ok(Self::from_str(&s).expect("infallible"))
397 }
398}
399impl stripe_types::Object for SubscriptionSchedule {
400 type Id = stripe_shared::SubscriptionScheduleId;
401 fn id(&self) -> &Self::Id {
402 &self.id
403 }
404
405 fn into_id(self) -> Self::Id {
406 self.id
407 }
408}
409stripe_types::def_id!(SubscriptionScheduleId);
410#[derive(Clone, Eq, PartialEq)]
411#[non_exhaustive]
412pub enum SubscriptionScheduleEndBehavior {
413 Cancel,
414 None,
415 Release,
416 Renew,
417 Unknown(String),
419}
420impl SubscriptionScheduleEndBehavior {
421 pub fn as_str(&self) -> &str {
422 use SubscriptionScheduleEndBehavior::*;
423 match self {
424 Cancel => "cancel",
425 None => "none",
426 Release => "release",
427 Renew => "renew",
428 Unknown(v) => v,
429 }
430 }
431}
432
433impl std::str::FromStr for SubscriptionScheduleEndBehavior {
434 type Err = std::convert::Infallible;
435 fn from_str(s: &str) -> Result<Self, Self::Err> {
436 use SubscriptionScheduleEndBehavior::*;
437 match s {
438 "cancel" => Ok(Cancel),
439 "none" => Ok(None),
440 "release" => Ok(Release),
441 "renew" => Ok(Renew),
442 v => {
443 tracing::warn!(
444 "Unknown value '{}' for enum '{}'",
445 v,
446 "SubscriptionScheduleEndBehavior"
447 );
448 Ok(Unknown(v.to_owned()))
449 }
450 }
451 }
452}
453impl std::fmt::Display for SubscriptionScheduleEndBehavior {
454 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
455 f.write_str(self.as_str())
456 }
457}
458
459impl std::fmt::Debug for SubscriptionScheduleEndBehavior {
460 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
461 f.write_str(self.as_str())
462 }
463}
464impl serde::Serialize for SubscriptionScheduleEndBehavior {
465 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
466 where
467 S: serde::Serializer,
468 {
469 serializer.serialize_str(self.as_str())
470 }
471}
472impl miniserde::Deserialize for SubscriptionScheduleEndBehavior {
473 fn begin(out: &mut Option<Self>) -> &mut dyn miniserde::de::Visitor {
474 crate::Place::new(out)
475 }
476}
477
478impl miniserde::de::Visitor for crate::Place<SubscriptionScheduleEndBehavior> {
479 fn string(&mut self, s: &str) -> miniserde::Result<()> {
480 use std::str::FromStr;
481 self.out = Some(SubscriptionScheduleEndBehavior::from_str(s).expect("infallible"));
482 Ok(())
483 }
484}
485
486stripe_types::impl_from_val_with_from_str!(SubscriptionScheduleEndBehavior);
487#[cfg(feature = "deserialize")]
488impl<'de> serde::Deserialize<'de> for SubscriptionScheduleEndBehavior {
489 fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
490 use std::str::FromStr;
491 let s: std::borrow::Cow<'de, str> = serde::Deserialize::deserialize(deserializer)?;
492 Ok(Self::from_str(&s).expect("infallible"))
493 }
494}