stripe_shared/
deleted_discount.rs

1#[derive(Clone, Debug)]
2#[cfg_attr(feature = "deserialize", derive(serde::Deserialize))]
3pub struct DeletedDiscount {
4    /// The Checkout session that this coupon is applied to, if it is applied to a particular session in payment mode.
5    /// Will not be present for subscription mode.
6    pub checkout_session: Option<String>,
7    /// The ID of the customer associated with this discount.
8    pub customer: Option<stripe_types::Expandable<stripe_shared::Customer>>,
9    /// The ID of the account representing the customer associated with this discount.
10    pub customer_account: Option<String>,
11    #[allow(dead_code)]
12    deleted: stripe_types::AlwaysTrue,
13    /// The ID of the discount object.
14    /// Discounts cannot be fetched by ID.
15    /// Use `expand[]=discounts` in API calls to expand discount IDs in an array.
16    pub id: stripe_shared::DiscountId,
17    /// The invoice that the discount's coupon was applied to, if it was applied directly to a particular invoice.
18    pub invoice: Option<String>,
19    /// The invoice item `id` (or invoice line item `id` for invoice line items of type='subscription') that the discount's coupon was applied to, if it was applied directly to a particular invoice item or invoice line item.
20    pub invoice_item: Option<String>,
21    /// The promotion code applied to create this discount.
22    pub promotion_code: Option<stripe_types::Expandable<stripe_shared::PromotionCode>>,
23    pub source: stripe_shared::DiscountSource,
24    /// Date that the coupon was applied.
25    pub start: stripe_types::Timestamp,
26    /// The subscription that this coupon is applied to, if it is applied to a particular subscription.
27    pub subscription: Option<String>,
28    /// The subscription item that this coupon is applied to, if it is applied to a particular subscription item.
29    pub subscription_item: Option<String>,
30}
31#[doc(hidden)]
32pub struct DeletedDiscountBuilder {
33    checkout_session: Option<Option<String>>,
34    customer: Option<Option<stripe_types::Expandable<stripe_shared::Customer>>>,
35    customer_account: Option<Option<String>>,
36    deleted: Option<stripe_types::AlwaysTrue>,
37    id: Option<stripe_shared::DiscountId>,
38    invoice: Option<Option<String>>,
39    invoice_item: Option<Option<String>>,
40    promotion_code: Option<Option<stripe_types::Expandable<stripe_shared::PromotionCode>>>,
41    source: Option<stripe_shared::DiscountSource>,
42    start: Option<stripe_types::Timestamp>,
43    subscription: Option<Option<String>>,
44    subscription_item: Option<Option<String>>,
45}
46
47#[allow(
48    unused_variables,
49    irrefutable_let_patterns,
50    clippy::let_unit_value,
51    clippy::match_single_binding,
52    clippy::single_match
53)]
54const _: () = {
55    use miniserde::de::{Map, Visitor};
56    use miniserde::json::Value;
57    use miniserde::{Deserialize, Result, make_place};
58    use stripe_types::miniserde_helpers::FromValueOpt;
59    use stripe_types::{MapBuilder, ObjectDeser};
60
61    make_place!(Place);
62
63    impl Deserialize for DeletedDiscount {
64        fn begin(out: &mut Option<Self>) -> &mut dyn Visitor {
65            Place::new(out)
66        }
67    }
68
69    struct Builder<'a> {
70        out: &'a mut Option<DeletedDiscount>,
71        builder: DeletedDiscountBuilder,
72    }
73
74    impl Visitor for Place<DeletedDiscount> {
75        fn map(&mut self) -> Result<Box<dyn Map + '_>> {
76            Ok(Box::new(Builder {
77                out: &mut self.out,
78                builder: DeletedDiscountBuilder::deser_default(),
79            }))
80        }
81    }
82
83    impl MapBuilder for DeletedDiscountBuilder {
84        type Out = DeletedDiscount;
85        fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
86            Ok(match k {
87                "checkout_session" => Deserialize::begin(&mut self.checkout_session),
88                "customer" => Deserialize::begin(&mut self.customer),
89                "customer_account" => Deserialize::begin(&mut self.customer_account),
90                "deleted" => Deserialize::begin(&mut self.deleted),
91                "id" => Deserialize::begin(&mut self.id),
92                "invoice" => Deserialize::begin(&mut self.invoice),
93                "invoice_item" => Deserialize::begin(&mut self.invoice_item),
94                "promotion_code" => Deserialize::begin(&mut self.promotion_code),
95                "source" => Deserialize::begin(&mut self.source),
96                "start" => Deserialize::begin(&mut self.start),
97                "subscription" => Deserialize::begin(&mut self.subscription),
98                "subscription_item" => Deserialize::begin(&mut self.subscription_item),
99                _ => <dyn Visitor>::ignore(),
100            })
101        }
102
103        fn deser_default() -> Self {
104            Self {
105                checkout_session: Deserialize::default(),
106                customer: Deserialize::default(),
107                customer_account: Deserialize::default(),
108                deleted: Deserialize::default(),
109                id: Deserialize::default(),
110                invoice: Deserialize::default(),
111                invoice_item: Deserialize::default(),
112                promotion_code: Deserialize::default(),
113                source: Deserialize::default(),
114                start: Deserialize::default(),
115                subscription: Deserialize::default(),
116                subscription_item: Deserialize::default(),
117            }
118        }
119
120        fn take_out(&mut self) -> Option<Self::Out> {
121            let (
122                Some(checkout_session),
123                Some(customer),
124                Some(customer_account),
125                Some(deleted),
126                Some(id),
127                Some(invoice),
128                Some(invoice_item),
129                Some(promotion_code),
130                Some(source),
131                Some(start),
132                Some(subscription),
133                Some(subscription_item),
134            ) = (
135                self.checkout_session.take(),
136                self.customer.take(),
137                self.customer_account.take(),
138                self.deleted,
139                self.id.take(),
140                self.invoice.take(),
141                self.invoice_item.take(),
142                self.promotion_code.take(),
143                self.source.take(),
144                self.start,
145                self.subscription.take(),
146                self.subscription_item.take(),
147            )
148            else {
149                return None;
150            };
151            Some(Self::Out {
152                checkout_session,
153                customer,
154                customer_account,
155                deleted,
156                id,
157                invoice,
158                invoice_item,
159                promotion_code,
160                source,
161                start,
162                subscription,
163                subscription_item,
164            })
165        }
166    }
167
168    impl Map for Builder<'_> {
169        fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
170            self.builder.key(k)
171        }
172
173        fn finish(&mut self) -> Result<()> {
174            *self.out = self.builder.take_out();
175            Ok(())
176        }
177    }
178
179    impl ObjectDeser for DeletedDiscount {
180        type Builder = DeletedDiscountBuilder;
181    }
182
183    impl FromValueOpt for DeletedDiscount {
184        fn from_value(v: Value) -> Option<Self> {
185            let Value::Object(obj) = v else {
186                return None;
187            };
188            let mut b = DeletedDiscountBuilder::deser_default();
189            for (k, v) in obj {
190                match k.as_str() {
191                    "checkout_session" => b.checkout_session = FromValueOpt::from_value(v),
192                    "customer" => b.customer = FromValueOpt::from_value(v),
193                    "customer_account" => b.customer_account = FromValueOpt::from_value(v),
194                    "deleted" => b.deleted = FromValueOpt::from_value(v),
195                    "id" => b.id = FromValueOpt::from_value(v),
196                    "invoice" => b.invoice = FromValueOpt::from_value(v),
197                    "invoice_item" => b.invoice_item = FromValueOpt::from_value(v),
198                    "promotion_code" => b.promotion_code = FromValueOpt::from_value(v),
199                    "source" => b.source = FromValueOpt::from_value(v),
200                    "start" => b.start = FromValueOpt::from_value(v),
201                    "subscription" => b.subscription = FromValueOpt::from_value(v),
202                    "subscription_item" => b.subscription_item = FromValueOpt::from_value(v),
203                    _ => {}
204                }
205            }
206            b.take_out()
207        }
208    }
209};
210#[cfg(feature = "serialize")]
211impl serde::Serialize for DeletedDiscount {
212    fn serialize<S: serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
213        use serde::ser::SerializeStruct;
214        let mut s = s.serialize_struct("DeletedDiscount", 13)?;
215        s.serialize_field("checkout_session", &self.checkout_session)?;
216        s.serialize_field("customer", &self.customer)?;
217        s.serialize_field("customer_account", &self.customer_account)?;
218        s.serialize_field("deleted", &self.deleted)?;
219        s.serialize_field("id", &self.id)?;
220        s.serialize_field("invoice", &self.invoice)?;
221        s.serialize_field("invoice_item", &self.invoice_item)?;
222        s.serialize_field("promotion_code", &self.promotion_code)?;
223        s.serialize_field("source", &self.source)?;
224        s.serialize_field("start", &self.start)?;
225        s.serialize_field("subscription", &self.subscription)?;
226        s.serialize_field("subscription_item", &self.subscription_item)?;
227
228        s.serialize_field("object", "discount")?;
229        s.end()
230    }
231}
232impl stripe_types::Object for DeletedDiscount {
233    type Id = stripe_shared::DiscountId;
234    fn id(&self) -> &Self::Id {
235        &self.id
236    }
237
238    fn into_id(self) -> Self::Id {
239        self.id
240    }
241}