1#[derive(Clone, Debug)]
2#[cfg_attr(feature = "serialize", derive(serde::Serialize))]
3#[cfg_attr(feature = "deserialize", derive(serde::Deserialize))]
4pub struct TaxProductResourceTaxBreakdown {
5 pub amount: i64,
7 pub inclusive: bool,
9 pub tax_rate_details: stripe_misc::TaxProductResourceTaxRateDetails,
10 pub taxability_reason: TaxProductResourceTaxBreakdownTaxabilityReason,
13 pub taxable_amount: i64,
15}
16#[doc(hidden)]
17pub struct TaxProductResourceTaxBreakdownBuilder {
18 amount: Option<i64>,
19 inclusive: Option<bool>,
20 tax_rate_details: Option<stripe_misc::TaxProductResourceTaxRateDetails>,
21 taxability_reason: Option<TaxProductResourceTaxBreakdownTaxabilityReason>,
22 taxable_amount: Option<i64>,
23}
24
25#[allow(
26 unused_variables,
27 irrefutable_let_patterns,
28 clippy::let_unit_value,
29 clippy::match_single_binding,
30 clippy::single_match
31)]
32const _: () = {
33 use miniserde::de::{Map, Visitor};
34 use miniserde::json::Value;
35 use miniserde::{Deserialize, Result, make_place};
36 use stripe_types::miniserde_helpers::FromValueOpt;
37 use stripe_types::{MapBuilder, ObjectDeser};
38
39 make_place!(Place);
40
41 impl Deserialize for TaxProductResourceTaxBreakdown {
42 fn begin(out: &mut Option<Self>) -> &mut dyn Visitor {
43 Place::new(out)
44 }
45 }
46
47 struct Builder<'a> {
48 out: &'a mut Option<TaxProductResourceTaxBreakdown>,
49 builder: TaxProductResourceTaxBreakdownBuilder,
50 }
51
52 impl Visitor for Place<TaxProductResourceTaxBreakdown> {
53 fn map(&mut self) -> Result<Box<dyn Map + '_>> {
54 Ok(Box::new(Builder {
55 out: &mut self.out,
56 builder: TaxProductResourceTaxBreakdownBuilder::deser_default(),
57 }))
58 }
59 }
60
61 impl MapBuilder for TaxProductResourceTaxBreakdownBuilder {
62 type Out = TaxProductResourceTaxBreakdown;
63 fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
64 Ok(match k {
65 "amount" => Deserialize::begin(&mut self.amount),
66 "inclusive" => Deserialize::begin(&mut self.inclusive),
67 "tax_rate_details" => Deserialize::begin(&mut self.tax_rate_details),
68 "taxability_reason" => Deserialize::begin(&mut self.taxability_reason),
69 "taxable_amount" => Deserialize::begin(&mut self.taxable_amount),
70 _ => <dyn Visitor>::ignore(),
71 })
72 }
73
74 fn deser_default() -> Self {
75 Self {
76 amount: Deserialize::default(),
77 inclusive: Deserialize::default(),
78 tax_rate_details: Deserialize::default(),
79 taxability_reason: Deserialize::default(),
80 taxable_amount: Deserialize::default(),
81 }
82 }
83
84 fn take_out(&mut self) -> Option<Self::Out> {
85 let (
86 Some(amount),
87 Some(inclusive),
88 Some(tax_rate_details),
89 Some(taxability_reason),
90 Some(taxable_amount),
91 ) = (
92 self.amount,
93 self.inclusive,
94 self.tax_rate_details.take(),
95 self.taxability_reason.take(),
96 self.taxable_amount,
97 )
98 else {
99 return None;
100 };
101 Some(Self::Out {
102 amount,
103 inclusive,
104 tax_rate_details,
105 taxability_reason,
106 taxable_amount,
107 })
108 }
109 }
110
111 impl Map for Builder<'_> {
112 fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
113 self.builder.key(k)
114 }
115
116 fn finish(&mut self) -> Result<()> {
117 *self.out = self.builder.take_out();
118 Ok(())
119 }
120 }
121
122 impl ObjectDeser for TaxProductResourceTaxBreakdown {
123 type Builder = TaxProductResourceTaxBreakdownBuilder;
124 }
125
126 impl FromValueOpt for TaxProductResourceTaxBreakdown {
127 fn from_value(v: Value) -> Option<Self> {
128 let Value::Object(obj) = v else {
129 return None;
130 };
131 let mut b = TaxProductResourceTaxBreakdownBuilder::deser_default();
132 for (k, v) in obj {
133 match k.as_str() {
134 "amount" => b.amount = FromValueOpt::from_value(v),
135 "inclusive" => b.inclusive = FromValueOpt::from_value(v),
136 "tax_rate_details" => b.tax_rate_details = FromValueOpt::from_value(v),
137 "taxability_reason" => b.taxability_reason = FromValueOpt::from_value(v),
138 "taxable_amount" => b.taxable_amount = FromValueOpt::from_value(v),
139 _ => {}
140 }
141 }
142 b.take_out()
143 }
144 }
145};
146#[derive(Clone, Eq, PartialEq)]
149#[non_exhaustive]
150pub enum TaxProductResourceTaxBreakdownTaxabilityReason {
151 CustomerExempt,
152 NotCollecting,
153 NotSubjectToTax,
154 NotSupported,
155 PortionProductExempt,
156 PortionReducedRated,
157 PortionStandardRated,
158 ProductExempt,
159 ProductExemptHoliday,
160 ProportionallyRated,
161 ReducedRated,
162 ReverseCharge,
163 StandardRated,
164 TaxableBasisReduced,
165 ZeroRated,
166 Unknown(String),
168}
169impl TaxProductResourceTaxBreakdownTaxabilityReason {
170 pub fn as_str(&self) -> &str {
171 use TaxProductResourceTaxBreakdownTaxabilityReason::*;
172 match self {
173 CustomerExempt => "customer_exempt",
174 NotCollecting => "not_collecting",
175 NotSubjectToTax => "not_subject_to_tax",
176 NotSupported => "not_supported",
177 PortionProductExempt => "portion_product_exempt",
178 PortionReducedRated => "portion_reduced_rated",
179 PortionStandardRated => "portion_standard_rated",
180 ProductExempt => "product_exempt",
181 ProductExemptHoliday => "product_exempt_holiday",
182 ProportionallyRated => "proportionally_rated",
183 ReducedRated => "reduced_rated",
184 ReverseCharge => "reverse_charge",
185 StandardRated => "standard_rated",
186 TaxableBasisReduced => "taxable_basis_reduced",
187 ZeroRated => "zero_rated",
188 Unknown(v) => v,
189 }
190 }
191}
192
193impl std::str::FromStr for TaxProductResourceTaxBreakdownTaxabilityReason {
194 type Err = std::convert::Infallible;
195 fn from_str(s: &str) -> Result<Self, Self::Err> {
196 use TaxProductResourceTaxBreakdownTaxabilityReason::*;
197 match s {
198 "customer_exempt" => Ok(CustomerExempt),
199 "not_collecting" => Ok(NotCollecting),
200 "not_subject_to_tax" => Ok(NotSubjectToTax),
201 "not_supported" => Ok(NotSupported),
202 "portion_product_exempt" => Ok(PortionProductExempt),
203 "portion_reduced_rated" => Ok(PortionReducedRated),
204 "portion_standard_rated" => Ok(PortionStandardRated),
205 "product_exempt" => Ok(ProductExempt),
206 "product_exempt_holiday" => Ok(ProductExemptHoliday),
207 "proportionally_rated" => Ok(ProportionallyRated),
208 "reduced_rated" => Ok(ReducedRated),
209 "reverse_charge" => Ok(ReverseCharge),
210 "standard_rated" => Ok(StandardRated),
211 "taxable_basis_reduced" => Ok(TaxableBasisReduced),
212 "zero_rated" => Ok(ZeroRated),
213 v => Ok(Unknown(v.to_owned())),
214 }
215 }
216}
217impl std::fmt::Display for TaxProductResourceTaxBreakdownTaxabilityReason {
218 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
219 f.write_str(self.as_str())
220 }
221}
222
223impl std::fmt::Debug for TaxProductResourceTaxBreakdownTaxabilityReason {
224 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
225 f.write_str(self.as_str())
226 }
227}
228#[cfg(feature = "serialize")]
229impl serde::Serialize for TaxProductResourceTaxBreakdownTaxabilityReason {
230 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
231 where
232 S: serde::Serializer,
233 {
234 serializer.serialize_str(self.as_str())
235 }
236}
237impl miniserde::Deserialize for TaxProductResourceTaxBreakdownTaxabilityReason {
238 fn begin(out: &mut Option<Self>) -> &mut dyn miniserde::de::Visitor {
239 crate::Place::new(out)
240 }
241}
242
243impl miniserde::de::Visitor for crate::Place<TaxProductResourceTaxBreakdownTaxabilityReason> {
244 fn string(&mut self, s: &str) -> miniserde::Result<()> {
245 use std::str::FromStr;
246 self.out = Some(TaxProductResourceTaxBreakdownTaxabilityReason::from_str(s).unwrap());
247 Ok(())
248 }
249}
250
251stripe_types::impl_from_val_with_from_str!(TaxProductResourceTaxBreakdownTaxabilityReason);
252#[cfg(feature = "deserialize")]
253impl<'de> serde::Deserialize<'de> for TaxProductResourceTaxBreakdownTaxabilityReason {
254 fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
255 use std::str::FromStr;
256 let s: std::borrow::Cow<'de, str> = serde::Deserialize::deserialize(deserializer)?;
257 Ok(Self::from_str(&s).unwrap())
258 }
259}