stripe/resources/generated/
line_item.rs1use crate::ids::InvoiceLineItemId;
6use crate::params::{Expandable, Metadata, Object};
7use crate::resources::{
8 Currency, Discount, InvoiceItem, Period, Plan, Price, Subscription, SubscriptionItem, TaxRate,
9};
10use serde::{Deserialize, Serialize};
11
12#[derive(Clone, Debug, Default, Deserialize, Serialize)]
14pub struct InvoiceLineItem {
15 pub id: InvoiceLineItemId,
17
18 pub amount: i64,
20
21 pub amount_excluding_tax: Option<i64>,
23
24 pub currency: Currency,
28
29 pub description: Option<String>,
33
34 pub discount_amounts: Option<Vec<DiscountsResourceDiscountAmount>>,
36
37 pub discountable: bool,
41
42 pub discounts: Option<Vec<Expandable<Discount>>>,
47
48 #[serde(skip_serializing_if = "Option::is_none")]
50 pub invoice_item: Option<Expandable<InvoiceItem>>,
51
52 pub livemode: bool,
54
55 pub metadata: Metadata,
60
61 pub period: Option<Period>,
62
63 pub plan: Option<Plan>,
65
66 pub price: Option<Price>,
68
69 pub proration: bool,
71
72 pub proration_details: Option<InvoicesResourceLineItemsProrationDetails>,
74
75 pub quantity: Option<u64>,
77
78 pub subscription: Option<Expandable<Subscription>>,
80
81 #[serde(skip_serializing_if = "Option::is_none")]
85 pub subscription_item: Option<Expandable<SubscriptionItem>>,
86
87 #[serde(skip_serializing_if = "Option::is_none")]
89 pub tax_amounts: Option<Vec<TaxAmount>>,
90
91 #[serde(skip_serializing_if = "Option::is_none")]
93 pub tax_rates: Option<Vec<TaxRate>>,
94
95 #[serde(rename = "type")]
97 pub type_: InvoiceLineItemType,
98
99 pub unit_amount_excluding_tax: Option<String>,
101}
102
103impl Object for InvoiceLineItem {
104 type Id = InvoiceLineItemId;
105 fn id(&self) -> Self::Id {
106 self.id.clone()
107 }
108 fn object(&self) -> &'static str {
109 "line_item"
110 }
111}
112
113#[derive(Clone, Debug, Default, Deserialize, Serialize)]
114pub struct DiscountsResourceDiscountAmount {
115 pub amount: i64,
117
118 pub discount: Expandable<Discount>,
120}
121
122#[derive(Clone, Debug, Default, Deserialize, Serialize)]
123pub struct TaxAmount {
124 pub amount: i64,
126
127 pub inclusive: bool,
129
130 pub tax_rate: Expandable<TaxRate>,
132
133 pub taxability_reason: Option<TaxAmountTaxabilityReason>,
137
138 pub taxable_amount: Option<i64>,
140}
141
142#[derive(Clone, Debug, Default, Deserialize, Serialize)]
143pub struct InvoicesResourceLineItemsProrationDetails {
144 pub credited_items: Option<InvoicesResourceLineItemsCreditedItems>,
146}
147
148#[derive(Clone, Debug, Default, Deserialize, Serialize)]
149pub struct InvoicesResourceLineItemsCreditedItems {
150 pub invoice: String,
152
153 pub invoice_line_items: Vec<String>,
155}
156
157#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
159#[serde(rename_all = "snake_case")]
160pub enum InvoiceLineItemType {
161 #[serde(rename = "invoiceitem")]
162 InvoiceItem,
163 Subscription,
164}
165
166impl InvoiceLineItemType {
167 pub fn as_str(self) -> &'static str {
168 match self {
169 InvoiceLineItemType::InvoiceItem => "invoiceitem",
170 InvoiceLineItemType::Subscription => "subscription",
171 }
172 }
173}
174
175impl AsRef<str> for InvoiceLineItemType {
176 fn as_ref(&self) -> &str {
177 self.as_str()
178 }
179}
180
181impl std::fmt::Display for InvoiceLineItemType {
182 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
183 self.as_str().fmt(f)
184 }
185}
186impl std::default::Default for InvoiceLineItemType {
187 fn default() -> Self {
188 Self::InvoiceItem
189 }
190}
191
192#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
194#[serde(rename_all = "snake_case")]
195pub enum TaxAmountTaxabilityReason {
196 CustomerExempt,
197 NotCollecting,
198 NotSubjectToTax,
199 NotSupported,
200 PortionProductExempt,
201 PortionReducedRated,
202 PortionStandardRated,
203 ProductExempt,
204 ProductExemptHoliday,
205 ProportionallyRated,
206 ReducedRated,
207 ReverseCharge,
208 StandardRated,
209 TaxableBasisReduced,
210 ZeroRated,
211}
212
213impl TaxAmountTaxabilityReason {
214 pub fn as_str(self) -> &'static str {
215 match self {
216 TaxAmountTaxabilityReason::CustomerExempt => "customer_exempt",
217 TaxAmountTaxabilityReason::NotCollecting => "not_collecting",
218 TaxAmountTaxabilityReason::NotSubjectToTax => "not_subject_to_tax",
219 TaxAmountTaxabilityReason::NotSupported => "not_supported",
220 TaxAmountTaxabilityReason::PortionProductExempt => "portion_product_exempt",
221 TaxAmountTaxabilityReason::PortionReducedRated => "portion_reduced_rated",
222 TaxAmountTaxabilityReason::PortionStandardRated => "portion_standard_rated",
223 TaxAmountTaxabilityReason::ProductExempt => "product_exempt",
224 TaxAmountTaxabilityReason::ProductExemptHoliday => "product_exempt_holiday",
225 TaxAmountTaxabilityReason::ProportionallyRated => "proportionally_rated",
226 TaxAmountTaxabilityReason::ReducedRated => "reduced_rated",
227 TaxAmountTaxabilityReason::ReverseCharge => "reverse_charge",
228 TaxAmountTaxabilityReason::StandardRated => "standard_rated",
229 TaxAmountTaxabilityReason::TaxableBasisReduced => "taxable_basis_reduced",
230 TaxAmountTaxabilityReason::ZeroRated => "zero_rated",
231 }
232 }
233}
234
235impl AsRef<str> for TaxAmountTaxabilityReason {
236 fn as_ref(&self) -> &str {
237 self.as_str()
238 }
239}
240
241impl std::fmt::Display for TaxAmountTaxabilityReason {
242 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
243 self.as_str().fmt(f)
244 }
245}
246impl std::default::Default for TaxAmountTaxabilityReason {
247 fn default() -> Self {
248 Self::CustomerExempt
249 }
250}