#[derive(Clone)]
#[cfg_attr(not(feature = "redact-generated-debug"), derive(Debug))]
#[cfg_attr(feature = "deserialize", derive(serde::Deserialize))]
pub struct Invoice {
pub account_country: Option<String>,
pub account_name: Option<String>,
pub account_tax_ids: Option<Vec<stripe_types::Expandable<stripe_shared::TaxId>>>,
pub amount_due: i64,
pub amount_overpaid: i64,
pub amount_paid: i64,
pub amount_remaining: i64,
pub amount_shipping: i64,
pub application: Option<stripe_types::Expandable<stripe_shared::Application>>,
pub attempt_count: u64,
pub attempted: bool,
pub auto_advance: Option<bool>,
pub automatic_tax: stripe_shared::AutomaticTax,
pub automatically_finalizes_at: Option<stripe_types::Timestamp>,
pub billing_reason: Option<InvoiceBillingReason>,
pub collection_method: stripe_shared::InvoiceCollectionMethod,
pub confirmation_secret: Option<stripe_shared::InvoicesResourceConfirmationSecret>,
pub created: stripe_types::Timestamp,
pub currency: stripe_types::Currency,
pub custom_fields: Option<Vec<stripe_shared::InvoiceSettingCustomField>>,
pub customer: Option<stripe_types::Expandable<stripe_shared::Customer>>,
pub customer_account: Option<String>,
pub customer_address: Option<stripe_shared::Address>,
pub customer_email: Option<String>,
pub customer_name: Option<String>,
pub customer_phone: Option<String>,
pub customer_shipping: Option<stripe_shared::Shipping>,
pub customer_tax_exempt: Option<InvoiceCustomerTaxExempt>,
pub customer_tax_ids: Option<Vec<stripe_shared::InvoicesResourceInvoiceTaxId>>,
pub default_payment_method: Option<stripe_types::Expandable<stripe_shared::PaymentMethod>>,
pub default_source: Option<stripe_types::Expandable<stripe_shared::PaymentSource>>,
pub default_tax_rates: Vec<stripe_shared::TaxRate>,
pub description: Option<String>,
pub discounts: Vec<stripe_types::Expandable<stripe_shared::Discount>>,
pub due_date: Option<stripe_types::Timestamp>,
pub effective_at: Option<stripe_types::Timestamp>,
pub ending_balance: Option<i64>,
pub footer: Option<String>,
pub from_invoice: Option<stripe_shared::InvoicesResourceFromInvoice>,
pub hosted_invoice_url: Option<String>,
pub id: Option<stripe_shared::InvoiceId>,
pub invoice_pdf: Option<String>,
pub issuer: stripe_shared::ConnectAccountReference,
pub last_finalization_error: Option<Box<stripe_shared::ApiErrors>>,
pub latest_revision: Option<stripe_types::Expandable<stripe_shared::Invoice>>,
pub lines: stripe_types::List<stripe_shared::InvoiceLineItem>,
pub livemode: bool,
pub metadata: Option<std::collections::HashMap<String, String>>,
pub next_payment_attempt: Option<stripe_types::Timestamp>,
pub number: Option<String>,
pub on_behalf_of: Option<stripe_types::Expandable<stripe_shared::Account>>,
pub parent: Option<stripe_shared::BillingBillResourceInvoicingParentsInvoiceParent>,
pub payment_settings: stripe_shared::InvoicesPaymentSettings,
pub payments: Option<stripe_types::List<stripe_shared::InvoicePayment>>,
pub period_end: stripe_types::Timestamp,
pub period_start: stripe_types::Timestamp,
pub post_payment_credit_notes_amount: i64,
pub pre_payment_credit_notes_amount: i64,
pub receipt_number: Option<String>,
pub rendering: Option<stripe_shared::InvoicesResourceInvoiceRendering>,
pub shipping_cost: Option<stripe_shared::InvoicesResourceShippingCost>,
pub shipping_details: Option<stripe_shared::Shipping>,
pub starting_balance: i64,
pub statement_descriptor: Option<String>,
pub status: Option<stripe_shared::InvoiceStatus>,
pub status_transitions: stripe_shared::InvoicesResourceStatusTransitions,
pub subscription: Option<stripe_types::Expandable<stripe_shared::Subscription>>,
pub subtotal: i64,
pub subtotal_excluding_tax: Option<i64>,
pub test_clock: Option<stripe_types::Expandable<stripe_shared::TestHelpersTestClock>>,
pub threshold_reason: Option<stripe_shared::InvoiceThresholdReason>,
pub total: i64,
pub total_discount_amounts: Option<Vec<stripe_shared::DiscountsResourceDiscountAmount>>,
pub total_excluding_tax: Option<i64>,
pub total_pretax_credit_amounts: Option<Vec<stripe_shared::InvoicesResourcePretaxCreditAmount>>,
pub total_taxes: Option<Vec<stripe_shared::BillingBillResourceInvoicingTaxesTax>>,
pub webhooks_delivered_at: Option<stripe_types::Timestamp>,
}
#[cfg(feature = "redact-generated-debug")]
impl std::fmt::Debug for Invoice {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
f.debug_struct("Invoice").finish_non_exhaustive()
}
}
#[doc(hidden)]
pub struct InvoiceBuilder {
account_country: Option<Option<String>>,
account_name: Option<Option<String>>,
account_tax_ids: Option<Option<Vec<stripe_types::Expandable<stripe_shared::TaxId>>>>,
amount_due: Option<i64>,
amount_overpaid: Option<i64>,
amount_paid: Option<i64>,
amount_remaining: Option<i64>,
amount_shipping: Option<i64>,
application: Option<Option<stripe_types::Expandable<stripe_shared::Application>>>,
attempt_count: Option<u64>,
attempted: Option<bool>,
auto_advance: Option<Option<bool>>,
automatic_tax: Option<stripe_shared::AutomaticTax>,
automatically_finalizes_at: Option<Option<stripe_types::Timestamp>>,
billing_reason: Option<Option<InvoiceBillingReason>>,
collection_method: Option<stripe_shared::InvoiceCollectionMethod>,
confirmation_secret: Option<Option<stripe_shared::InvoicesResourceConfirmationSecret>>,
created: Option<stripe_types::Timestamp>,
currency: Option<stripe_types::Currency>,
custom_fields: Option<Option<Vec<stripe_shared::InvoiceSettingCustomField>>>,
customer: Option<Option<stripe_types::Expandable<stripe_shared::Customer>>>,
customer_account: Option<Option<String>>,
customer_address: Option<Option<stripe_shared::Address>>,
customer_email: Option<Option<String>>,
customer_name: Option<Option<String>>,
customer_phone: Option<Option<String>>,
customer_shipping: Option<Option<stripe_shared::Shipping>>,
customer_tax_exempt: Option<Option<InvoiceCustomerTaxExempt>>,
customer_tax_ids: Option<Option<Vec<stripe_shared::InvoicesResourceInvoiceTaxId>>>,
default_payment_method: Option<Option<stripe_types::Expandable<stripe_shared::PaymentMethod>>>,
default_source: Option<Option<stripe_types::Expandable<stripe_shared::PaymentSource>>>,
default_tax_rates: Option<Vec<stripe_shared::TaxRate>>,
description: Option<Option<String>>,
discounts: Option<Vec<stripe_types::Expandable<stripe_shared::Discount>>>,
due_date: Option<Option<stripe_types::Timestamp>>,
effective_at: Option<Option<stripe_types::Timestamp>>,
ending_balance: Option<Option<i64>>,
footer: Option<Option<String>>,
from_invoice: Option<Option<stripe_shared::InvoicesResourceFromInvoice>>,
hosted_invoice_url: Option<Option<String>>,
id: Option<Option<stripe_shared::InvoiceId>>,
invoice_pdf: Option<Option<String>>,
issuer: Option<stripe_shared::ConnectAccountReference>,
last_finalization_error: Option<Option<Box<stripe_shared::ApiErrors>>>,
latest_revision: Option<Option<stripe_types::Expandable<stripe_shared::Invoice>>>,
lines: Option<stripe_types::List<stripe_shared::InvoiceLineItem>>,
livemode: Option<bool>,
metadata: Option<Option<std::collections::HashMap<String, String>>>,
next_payment_attempt: Option<Option<stripe_types::Timestamp>>,
number: Option<Option<String>>,
on_behalf_of: Option<Option<stripe_types::Expandable<stripe_shared::Account>>>,
parent: Option<Option<stripe_shared::BillingBillResourceInvoicingParentsInvoiceParent>>,
payment_settings: Option<stripe_shared::InvoicesPaymentSettings>,
payments: Option<Option<stripe_types::List<stripe_shared::InvoicePayment>>>,
period_end: Option<stripe_types::Timestamp>,
period_start: Option<stripe_types::Timestamp>,
post_payment_credit_notes_amount: Option<i64>,
pre_payment_credit_notes_amount: Option<i64>,
receipt_number: Option<Option<String>>,
rendering: Option<Option<stripe_shared::InvoicesResourceInvoiceRendering>>,
shipping_cost: Option<Option<stripe_shared::InvoicesResourceShippingCost>>,
shipping_details: Option<Option<stripe_shared::Shipping>>,
starting_balance: Option<i64>,
statement_descriptor: Option<Option<String>>,
status: Option<Option<stripe_shared::InvoiceStatus>>,
status_transitions: Option<stripe_shared::InvoicesResourceStatusTransitions>,
subscription: Option<Option<stripe_types::Expandable<stripe_shared::Subscription>>>,
subtotal: Option<i64>,
subtotal_excluding_tax: Option<Option<i64>>,
test_clock: Option<Option<stripe_types::Expandable<stripe_shared::TestHelpersTestClock>>>,
threshold_reason: Option<Option<stripe_shared::InvoiceThresholdReason>>,
total: Option<i64>,
total_discount_amounts: Option<Option<Vec<stripe_shared::DiscountsResourceDiscountAmount>>>,
total_excluding_tax: Option<Option<i64>>,
total_pretax_credit_amounts:
Option<Option<Vec<stripe_shared::InvoicesResourcePretaxCreditAmount>>>,
total_taxes: Option<Option<Vec<stripe_shared::BillingBillResourceInvoicingTaxesTax>>>,
webhooks_delivered_at: Option<Option<stripe_types::Timestamp>>,
}
#[allow(
unused_variables,
irrefutable_let_patterns,
clippy::let_unit_value,
clippy::match_single_binding,
clippy::single_match
)]
const _: () = {
use miniserde::de::{Map, Visitor};
use miniserde::json::Value;
use miniserde::{Deserialize, Result, make_place};
use stripe_types::miniserde_helpers::FromValueOpt;
use stripe_types::{MapBuilder, ObjectDeser};
make_place!(Place);
impl Deserialize for Invoice {
fn begin(out: &mut Option<Self>) -> &mut dyn Visitor {
Place::new(out)
}
}
struct Builder<'a> {
out: &'a mut Option<Invoice>,
builder: InvoiceBuilder,
}
impl Visitor for Place<Invoice> {
fn map(&mut self) -> Result<Box<dyn Map + '_>> {
Ok(Box::new(Builder { out: &mut self.out, builder: InvoiceBuilder::deser_default() }))
}
}
impl MapBuilder for InvoiceBuilder {
type Out = Invoice;
fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
Ok(match k {
"account_country" => Deserialize::begin(&mut self.account_country),
"account_name" => Deserialize::begin(&mut self.account_name),
"account_tax_ids" => Deserialize::begin(&mut self.account_tax_ids),
"amount_due" => Deserialize::begin(&mut self.amount_due),
"amount_overpaid" => Deserialize::begin(&mut self.amount_overpaid),
"amount_paid" => Deserialize::begin(&mut self.amount_paid),
"amount_remaining" => Deserialize::begin(&mut self.amount_remaining),
"amount_shipping" => Deserialize::begin(&mut self.amount_shipping),
"application" => Deserialize::begin(&mut self.application),
"attempt_count" => Deserialize::begin(&mut self.attempt_count),
"attempted" => Deserialize::begin(&mut self.attempted),
"auto_advance" => Deserialize::begin(&mut self.auto_advance),
"automatic_tax" => Deserialize::begin(&mut self.automatic_tax),
"automatically_finalizes_at" => {
Deserialize::begin(&mut self.automatically_finalizes_at)
}
"billing_reason" => Deserialize::begin(&mut self.billing_reason),
"collection_method" => Deserialize::begin(&mut self.collection_method),
"confirmation_secret" => Deserialize::begin(&mut self.confirmation_secret),
"created" => Deserialize::begin(&mut self.created),
"currency" => Deserialize::begin(&mut self.currency),
"custom_fields" => Deserialize::begin(&mut self.custom_fields),
"customer" => Deserialize::begin(&mut self.customer),
"customer_account" => Deserialize::begin(&mut self.customer_account),
"customer_address" => Deserialize::begin(&mut self.customer_address),
"customer_email" => Deserialize::begin(&mut self.customer_email),
"customer_name" => Deserialize::begin(&mut self.customer_name),
"customer_phone" => Deserialize::begin(&mut self.customer_phone),
"customer_shipping" => Deserialize::begin(&mut self.customer_shipping),
"customer_tax_exempt" => Deserialize::begin(&mut self.customer_tax_exempt),
"customer_tax_ids" => Deserialize::begin(&mut self.customer_tax_ids),
"default_payment_method" => Deserialize::begin(&mut self.default_payment_method),
"default_source" => Deserialize::begin(&mut self.default_source),
"default_tax_rates" => Deserialize::begin(&mut self.default_tax_rates),
"description" => Deserialize::begin(&mut self.description),
"discounts" => Deserialize::begin(&mut self.discounts),
"due_date" => Deserialize::begin(&mut self.due_date),
"effective_at" => Deserialize::begin(&mut self.effective_at),
"ending_balance" => Deserialize::begin(&mut self.ending_balance),
"footer" => Deserialize::begin(&mut self.footer),
"from_invoice" => Deserialize::begin(&mut self.from_invoice),
"hosted_invoice_url" => Deserialize::begin(&mut self.hosted_invoice_url),
"id" => Deserialize::begin(&mut self.id),
"invoice_pdf" => Deserialize::begin(&mut self.invoice_pdf),
"issuer" => Deserialize::begin(&mut self.issuer),
"last_finalization_error" => Deserialize::begin(&mut self.last_finalization_error),
"latest_revision" => Deserialize::begin(&mut self.latest_revision),
"lines" => Deserialize::begin(&mut self.lines),
"livemode" => Deserialize::begin(&mut self.livemode),
"metadata" => Deserialize::begin(&mut self.metadata),
"next_payment_attempt" => Deserialize::begin(&mut self.next_payment_attempt),
"number" => Deserialize::begin(&mut self.number),
"on_behalf_of" => Deserialize::begin(&mut self.on_behalf_of),
"parent" => Deserialize::begin(&mut self.parent),
"payment_settings" => Deserialize::begin(&mut self.payment_settings),
"payments" => Deserialize::begin(&mut self.payments),
"period_end" => Deserialize::begin(&mut self.period_end),
"period_start" => Deserialize::begin(&mut self.period_start),
"post_payment_credit_notes_amount" => {
Deserialize::begin(&mut self.post_payment_credit_notes_amount)
}
"pre_payment_credit_notes_amount" => {
Deserialize::begin(&mut self.pre_payment_credit_notes_amount)
}
"receipt_number" => Deserialize::begin(&mut self.receipt_number),
"rendering" => Deserialize::begin(&mut self.rendering),
"shipping_cost" => Deserialize::begin(&mut self.shipping_cost),
"shipping_details" => Deserialize::begin(&mut self.shipping_details),
"starting_balance" => Deserialize::begin(&mut self.starting_balance),
"statement_descriptor" => Deserialize::begin(&mut self.statement_descriptor),
"status" => Deserialize::begin(&mut self.status),
"status_transitions" => Deserialize::begin(&mut self.status_transitions),
"subscription" => Deserialize::begin(&mut self.subscription),
"subtotal" => Deserialize::begin(&mut self.subtotal),
"subtotal_excluding_tax" => Deserialize::begin(&mut self.subtotal_excluding_tax),
"test_clock" => Deserialize::begin(&mut self.test_clock),
"threshold_reason" => Deserialize::begin(&mut self.threshold_reason),
"total" => Deserialize::begin(&mut self.total),
"total_discount_amounts" => Deserialize::begin(&mut self.total_discount_amounts),
"total_excluding_tax" => Deserialize::begin(&mut self.total_excluding_tax),
"total_pretax_credit_amounts" => {
Deserialize::begin(&mut self.total_pretax_credit_amounts)
}
"total_taxes" => Deserialize::begin(&mut self.total_taxes),
"webhooks_delivered_at" => Deserialize::begin(&mut self.webhooks_delivered_at),
_ => <dyn Visitor>::ignore(),
})
}
fn deser_default() -> Self {
Self {
account_country: Some(None),
account_name: Some(None),
account_tax_ids: Some(None),
amount_due: None,
amount_overpaid: None,
amount_paid: None,
amount_remaining: None,
amount_shipping: None,
application: Some(None),
attempt_count: None,
attempted: None,
auto_advance: Some(None),
automatic_tax: None,
automatically_finalizes_at: Some(None),
billing_reason: Some(None),
collection_method: None,
confirmation_secret: Some(None),
created: None,
currency: None,
custom_fields: Some(None),
customer: Some(None),
customer_account: Some(None),
customer_address: Some(None),
customer_email: Some(None),
customer_name: Some(None),
customer_phone: Some(None),
customer_shipping: Some(None),
customer_tax_exempt: Some(None),
customer_tax_ids: Some(None),
default_payment_method: Some(None),
default_source: Some(None),
default_tax_rates: None,
description: Some(None),
discounts: None,
due_date: Some(None),
effective_at: Some(None),
ending_balance: Some(None),
footer: Some(None),
from_invoice: Some(None),
hosted_invoice_url: Some(None),
id: Some(None),
invoice_pdf: Some(None),
issuer: None,
last_finalization_error: Some(None),
latest_revision: Some(None),
lines: None,
livemode: None,
metadata: Some(None),
next_payment_attempt: Some(None),
number: Some(None),
on_behalf_of: Some(None),
parent: Some(None),
payment_settings: None,
payments: Some(None),
period_end: None,
period_start: None,
post_payment_credit_notes_amount: None,
pre_payment_credit_notes_amount: None,
receipt_number: Some(None),
rendering: Some(None),
shipping_cost: Some(None),
shipping_details: Some(None),
starting_balance: None,
statement_descriptor: Some(None),
status: Some(None),
status_transitions: None,
subscription: Some(None),
subtotal: None,
subtotal_excluding_tax: Some(None),
test_clock: Some(None),
threshold_reason: Some(None),
total: None,
total_discount_amounts: Some(None),
total_excluding_tax: Some(None),
total_pretax_credit_amounts: Some(None),
total_taxes: Some(None),
webhooks_delivered_at: Some(None),
}
}
fn take_out(&mut self) -> Option<Self::Out> {
let (
Some(account_country),
Some(account_name),
Some(account_tax_ids),
Some(amount_due),
Some(amount_overpaid),
Some(amount_paid),
Some(amount_remaining),
Some(amount_shipping),
Some(application),
Some(attempt_count),
Some(attempted),
Some(auto_advance),
Some(automatic_tax),
Some(automatically_finalizes_at),
Some(billing_reason),
Some(collection_method),
Some(confirmation_secret),
Some(created),
Some(currency),
Some(custom_fields),
Some(customer),
Some(customer_account),
Some(customer_address),
Some(customer_email),
Some(customer_name),
Some(customer_phone),
Some(customer_shipping),
Some(customer_tax_exempt),
Some(customer_tax_ids),
Some(default_payment_method),
Some(default_source),
Some(default_tax_rates),
Some(description),
Some(discounts),
Some(due_date),
Some(effective_at),
Some(ending_balance),
Some(footer),
Some(from_invoice),
Some(hosted_invoice_url),
Some(id),
Some(invoice_pdf),
Some(issuer),
Some(last_finalization_error),
Some(latest_revision),
Some(lines),
Some(livemode),
Some(metadata),
Some(next_payment_attempt),
Some(number),
Some(on_behalf_of),
Some(parent),
Some(payment_settings),
Some(payments),
Some(period_end),
Some(period_start),
Some(post_payment_credit_notes_amount),
Some(pre_payment_credit_notes_amount),
Some(receipt_number),
Some(rendering),
Some(shipping_cost),
Some(shipping_details),
Some(starting_balance),
Some(statement_descriptor),
Some(status),
Some(status_transitions),
Some(subscription),
Some(subtotal),
Some(subtotal_excluding_tax),
Some(test_clock),
Some(threshold_reason),
Some(total),
Some(total_discount_amounts),
Some(total_excluding_tax),
Some(total_pretax_credit_amounts),
Some(total_taxes),
Some(webhooks_delivered_at),
) = (
self.account_country.take(),
self.account_name.take(),
self.account_tax_ids.take(),
self.amount_due,
self.amount_overpaid,
self.amount_paid,
self.amount_remaining,
self.amount_shipping,
self.application.take(),
self.attempt_count,
self.attempted,
self.auto_advance,
self.automatic_tax.take(),
self.automatically_finalizes_at,
self.billing_reason.take(),
self.collection_method.take(),
self.confirmation_secret.take(),
self.created,
self.currency.take(),
self.custom_fields.take(),
self.customer.take(),
self.customer_account.take(),
self.customer_address.take(),
self.customer_email.take(),
self.customer_name.take(),
self.customer_phone.take(),
self.customer_shipping.take(),
self.customer_tax_exempt.take(),
self.customer_tax_ids.take(),
self.default_payment_method.take(),
self.default_source.take(),
self.default_tax_rates.take(),
self.description.take(),
self.discounts.take(),
self.due_date,
self.effective_at,
self.ending_balance,
self.footer.take(),
self.from_invoice.take(),
self.hosted_invoice_url.take(),
self.id.take(),
self.invoice_pdf.take(),
self.issuer.take(),
self.last_finalization_error.take(),
self.latest_revision.take(),
self.lines.take(),
self.livemode,
self.metadata.take(),
self.next_payment_attempt,
self.number.take(),
self.on_behalf_of.take(),
self.parent.take(),
self.payment_settings.take(),
self.payments.take(),
self.period_end,
self.period_start,
self.post_payment_credit_notes_amount,
self.pre_payment_credit_notes_amount,
self.receipt_number.take(),
self.rendering.take(),
self.shipping_cost.take(),
self.shipping_details.take(),
self.starting_balance,
self.statement_descriptor.take(),
self.status.take(),
self.status_transitions,
self.subscription.take(),
self.subtotal,
self.subtotal_excluding_tax,
self.test_clock.take(),
self.threshold_reason.take(),
self.total,
self.total_discount_amounts.take(),
self.total_excluding_tax,
self.total_pretax_credit_amounts.take(),
self.total_taxes.take(),
self.webhooks_delivered_at,
)
else {
return None;
};
Some(Self::Out {
account_country,
account_name,
account_tax_ids,
amount_due,
amount_overpaid,
amount_paid,
amount_remaining,
amount_shipping,
application,
attempt_count,
attempted,
auto_advance,
automatic_tax,
automatically_finalizes_at,
billing_reason,
collection_method,
confirmation_secret,
created,
currency,
custom_fields,
customer,
customer_account,
customer_address,
customer_email,
customer_name,
customer_phone,
customer_shipping,
customer_tax_exempt,
customer_tax_ids,
default_payment_method,
default_source,
default_tax_rates,
description,
discounts,
due_date,
effective_at,
ending_balance,
footer,
from_invoice,
hosted_invoice_url,
id,
invoice_pdf,
issuer,
last_finalization_error,
latest_revision,
lines,
livemode,
metadata,
next_payment_attempt,
number,
on_behalf_of,
parent,
payment_settings,
payments,
period_end,
period_start,
post_payment_credit_notes_amount,
pre_payment_credit_notes_amount,
receipt_number,
rendering,
shipping_cost,
shipping_details,
starting_balance,
statement_descriptor,
status,
status_transitions,
subscription,
subtotal,
subtotal_excluding_tax,
test_clock,
threshold_reason,
total,
total_discount_amounts,
total_excluding_tax,
total_pretax_credit_amounts,
total_taxes,
webhooks_delivered_at,
})
}
}
impl Map for Builder<'_> {
fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
self.builder.key(k)
}
fn finish(&mut self) -> Result<()> {
*self.out = self.builder.take_out();
Ok(())
}
}
impl ObjectDeser for Invoice {
type Builder = InvoiceBuilder;
}
impl FromValueOpt for Invoice {
fn from_value(v: Value) -> Option<Self> {
let Value::Object(obj) = v else {
return None;
};
let mut b = InvoiceBuilder::deser_default();
for (k, v) in obj {
match k.as_str() {
"account_country" => b.account_country = FromValueOpt::from_value(v),
"account_name" => b.account_name = FromValueOpt::from_value(v),
"account_tax_ids" => b.account_tax_ids = FromValueOpt::from_value(v),
"amount_due" => b.amount_due = FromValueOpt::from_value(v),
"amount_overpaid" => b.amount_overpaid = FromValueOpt::from_value(v),
"amount_paid" => b.amount_paid = FromValueOpt::from_value(v),
"amount_remaining" => b.amount_remaining = FromValueOpt::from_value(v),
"amount_shipping" => b.amount_shipping = FromValueOpt::from_value(v),
"application" => b.application = FromValueOpt::from_value(v),
"attempt_count" => b.attempt_count = FromValueOpt::from_value(v),
"attempted" => b.attempted = FromValueOpt::from_value(v),
"auto_advance" => b.auto_advance = FromValueOpt::from_value(v),
"automatic_tax" => b.automatic_tax = FromValueOpt::from_value(v),
"automatically_finalizes_at" => {
b.automatically_finalizes_at = FromValueOpt::from_value(v)
}
"billing_reason" => b.billing_reason = FromValueOpt::from_value(v),
"collection_method" => b.collection_method = FromValueOpt::from_value(v),
"confirmation_secret" => b.confirmation_secret = FromValueOpt::from_value(v),
"created" => b.created = FromValueOpt::from_value(v),
"currency" => b.currency = FromValueOpt::from_value(v),
"custom_fields" => b.custom_fields = FromValueOpt::from_value(v),
"customer" => b.customer = FromValueOpt::from_value(v),
"customer_account" => b.customer_account = FromValueOpt::from_value(v),
"customer_address" => b.customer_address = FromValueOpt::from_value(v),
"customer_email" => b.customer_email = FromValueOpt::from_value(v),
"customer_name" => b.customer_name = FromValueOpt::from_value(v),
"customer_phone" => b.customer_phone = FromValueOpt::from_value(v),
"customer_shipping" => b.customer_shipping = FromValueOpt::from_value(v),
"customer_tax_exempt" => b.customer_tax_exempt = FromValueOpt::from_value(v),
"customer_tax_ids" => b.customer_tax_ids = FromValueOpt::from_value(v),
"default_payment_method" => {
b.default_payment_method = FromValueOpt::from_value(v)
}
"default_source" => b.default_source = FromValueOpt::from_value(v),
"default_tax_rates" => b.default_tax_rates = FromValueOpt::from_value(v),
"description" => b.description = FromValueOpt::from_value(v),
"discounts" => b.discounts = FromValueOpt::from_value(v),
"due_date" => b.due_date = FromValueOpt::from_value(v),
"effective_at" => b.effective_at = FromValueOpt::from_value(v),
"ending_balance" => b.ending_balance = FromValueOpt::from_value(v),
"footer" => b.footer = FromValueOpt::from_value(v),
"from_invoice" => b.from_invoice = FromValueOpt::from_value(v),
"hosted_invoice_url" => b.hosted_invoice_url = FromValueOpt::from_value(v),
"id" => b.id = FromValueOpt::from_value(v),
"invoice_pdf" => b.invoice_pdf = FromValueOpt::from_value(v),
"issuer" => b.issuer = FromValueOpt::from_value(v),
"last_finalization_error" => {
b.last_finalization_error = FromValueOpt::from_value(v)
}
"latest_revision" => b.latest_revision = FromValueOpt::from_value(v),
"lines" => b.lines = FromValueOpt::from_value(v),
"livemode" => b.livemode = FromValueOpt::from_value(v),
"metadata" => b.metadata = FromValueOpt::from_value(v),
"next_payment_attempt" => b.next_payment_attempt = FromValueOpt::from_value(v),
"number" => b.number = FromValueOpt::from_value(v),
"on_behalf_of" => b.on_behalf_of = FromValueOpt::from_value(v),
"parent" => b.parent = FromValueOpt::from_value(v),
"payment_settings" => b.payment_settings = FromValueOpt::from_value(v),
"payments" => b.payments = FromValueOpt::from_value(v),
"period_end" => b.period_end = FromValueOpt::from_value(v),
"period_start" => b.period_start = FromValueOpt::from_value(v),
"post_payment_credit_notes_amount" => {
b.post_payment_credit_notes_amount = FromValueOpt::from_value(v)
}
"pre_payment_credit_notes_amount" => {
b.pre_payment_credit_notes_amount = FromValueOpt::from_value(v)
}
"receipt_number" => b.receipt_number = FromValueOpt::from_value(v),
"rendering" => b.rendering = FromValueOpt::from_value(v),
"shipping_cost" => b.shipping_cost = FromValueOpt::from_value(v),
"shipping_details" => b.shipping_details = FromValueOpt::from_value(v),
"starting_balance" => b.starting_balance = FromValueOpt::from_value(v),
"statement_descriptor" => b.statement_descriptor = FromValueOpt::from_value(v),
"status" => b.status = FromValueOpt::from_value(v),
"status_transitions" => b.status_transitions = FromValueOpt::from_value(v),
"subscription" => b.subscription = FromValueOpt::from_value(v),
"subtotal" => b.subtotal = FromValueOpt::from_value(v),
"subtotal_excluding_tax" => {
b.subtotal_excluding_tax = FromValueOpt::from_value(v)
}
"test_clock" => b.test_clock = FromValueOpt::from_value(v),
"threshold_reason" => b.threshold_reason = FromValueOpt::from_value(v),
"total" => b.total = FromValueOpt::from_value(v),
"total_discount_amounts" => {
b.total_discount_amounts = FromValueOpt::from_value(v)
}
"total_excluding_tax" => b.total_excluding_tax = FromValueOpt::from_value(v),
"total_pretax_credit_amounts" => {
b.total_pretax_credit_amounts = FromValueOpt::from_value(v)
}
"total_taxes" => b.total_taxes = FromValueOpt::from_value(v),
"webhooks_delivered_at" => {
b.webhooks_delivered_at = FromValueOpt::from_value(v)
}
_ => {}
}
}
b.take_out()
}
}
};
#[cfg(feature = "serialize")]
impl serde::Serialize for Invoice {
fn serialize<S: serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
use serde::ser::SerializeStruct;
let mut s = s.serialize_struct("Invoice", 78)?;
s.serialize_field("account_country", &self.account_country)?;
s.serialize_field("account_name", &self.account_name)?;
s.serialize_field("account_tax_ids", &self.account_tax_ids)?;
s.serialize_field("amount_due", &self.amount_due)?;
s.serialize_field("amount_overpaid", &self.amount_overpaid)?;
s.serialize_field("amount_paid", &self.amount_paid)?;
s.serialize_field("amount_remaining", &self.amount_remaining)?;
s.serialize_field("amount_shipping", &self.amount_shipping)?;
s.serialize_field("application", &self.application)?;
s.serialize_field("attempt_count", &self.attempt_count)?;
s.serialize_field("attempted", &self.attempted)?;
s.serialize_field("auto_advance", &self.auto_advance)?;
s.serialize_field("automatic_tax", &self.automatic_tax)?;
s.serialize_field("automatically_finalizes_at", &self.automatically_finalizes_at)?;
s.serialize_field("billing_reason", &self.billing_reason)?;
s.serialize_field("collection_method", &self.collection_method)?;
s.serialize_field("confirmation_secret", &self.confirmation_secret)?;
s.serialize_field("created", &self.created)?;
s.serialize_field("currency", &self.currency)?;
s.serialize_field("custom_fields", &self.custom_fields)?;
s.serialize_field("customer", &self.customer)?;
s.serialize_field("customer_account", &self.customer_account)?;
s.serialize_field("customer_address", &self.customer_address)?;
s.serialize_field("customer_email", &self.customer_email)?;
s.serialize_field("customer_name", &self.customer_name)?;
s.serialize_field("customer_phone", &self.customer_phone)?;
s.serialize_field("customer_shipping", &self.customer_shipping)?;
s.serialize_field("customer_tax_exempt", &self.customer_tax_exempt)?;
s.serialize_field("customer_tax_ids", &self.customer_tax_ids)?;
s.serialize_field("default_payment_method", &self.default_payment_method)?;
s.serialize_field("default_source", &self.default_source)?;
s.serialize_field("default_tax_rates", &self.default_tax_rates)?;
s.serialize_field("description", &self.description)?;
s.serialize_field("discounts", &self.discounts)?;
s.serialize_field("due_date", &self.due_date)?;
s.serialize_field("effective_at", &self.effective_at)?;
s.serialize_field("ending_balance", &self.ending_balance)?;
s.serialize_field("footer", &self.footer)?;
s.serialize_field("from_invoice", &self.from_invoice)?;
s.serialize_field("hosted_invoice_url", &self.hosted_invoice_url)?;
s.serialize_field("id", &self.id)?;
s.serialize_field("invoice_pdf", &self.invoice_pdf)?;
s.serialize_field("issuer", &self.issuer)?;
s.serialize_field("last_finalization_error", &self.last_finalization_error)?;
s.serialize_field("latest_revision", &self.latest_revision)?;
s.serialize_field("lines", &self.lines)?;
s.serialize_field("livemode", &self.livemode)?;
s.serialize_field("metadata", &self.metadata)?;
s.serialize_field("next_payment_attempt", &self.next_payment_attempt)?;
s.serialize_field("number", &self.number)?;
s.serialize_field("on_behalf_of", &self.on_behalf_of)?;
s.serialize_field("parent", &self.parent)?;
s.serialize_field("payment_settings", &self.payment_settings)?;
s.serialize_field("payments", &self.payments)?;
s.serialize_field("period_end", &self.period_end)?;
s.serialize_field("period_start", &self.period_start)?;
s.serialize_field(
"post_payment_credit_notes_amount",
&self.post_payment_credit_notes_amount,
)?;
s.serialize_field(
"pre_payment_credit_notes_amount",
&self.pre_payment_credit_notes_amount,
)?;
s.serialize_field("receipt_number", &self.receipt_number)?;
s.serialize_field("rendering", &self.rendering)?;
s.serialize_field("shipping_cost", &self.shipping_cost)?;
s.serialize_field("shipping_details", &self.shipping_details)?;
s.serialize_field("starting_balance", &self.starting_balance)?;
s.serialize_field("statement_descriptor", &self.statement_descriptor)?;
s.serialize_field("status", &self.status)?;
s.serialize_field("status_transitions", &self.status_transitions)?;
s.serialize_field("subscription", &self.subscription)?;
s.serialize_field("subtotal", &self.subtotal)?;
s.serialize_field("subtotal_excluding_tax", &self.subtotal_excluding_tax)?;
s.serialize_field("test_clock", &self.test_clock)?;
s.serialize_field("threshold_reason", &self.threshold_reason)?;
s.serialize_field("total", &self.total)?;
s.serialize_field("total_discount_amounts", &self.total_discount_amounts)?;
s.serialize_field("total_excluding_tax", &self.total_excluding_tax)?;
s.serialize_field("total_pretax_credit_amounts", &self.total_pretax_credit_amounts)?;
s.serialize_field("total_taxes", &self.total_taxes)?;
s.serialize_field("webhooks_delivered_at", &self.webhooks_delivered_at)?;
s.serialize_field("object", "invoice")?;
s.end()
}
}
#[derive(Clone, Eq, PartialEq)]
#[non_exhaustive]
pub enum InvoiceBillingReason {
AutomaticPendingInvoiceItemInvoice,
Manual,
QuoteAccept,
Subscription,
SubscriptionCreate,
SubscriptionCycle,
SubscriptionThreshold,
SubscriptionUpdate,
Upcoming,
Unknown(String),
}
impl InvoiceBillingReason {
pub fn as_str(&self) -> &str {
use InvoiceBillingReason::*;
match self {
AutomaticPendingInvoiceItemInvoice => "automatic_pending_invoice_item_invoice",
Manual => "manual",
QuoteAccept => "quote_accept",
Subscription => "subscription",
SubscriptionCreate => "subscription_create",
SubscriptionCycle => "subscription_cycle",
SubscriptionThreshold => "subscription_threshold",
SubscriptionUpdate => "subscription_update",
Upcoming => "upcoming",
Unknown(v) => v,
}
}
}
impl std::str::FromStr for InvoiceBillingReason {
type Err = std::convert::Infallible;
fn from_str(s: &str) -> Result<Self, Self::Err> {
use InvoiceBillingReason::*;
match s {
"automatic_pending_invoice_item_invoice" => Ok(AutomaticPendingInvoiceItemInvoice),
"manual" => Ok(Manual),
"quote_accept" => Ok(QuoteAccept),
"subscription" => Ok(Subscription),
"subscription_create" => Ok(SubscriptionCreate),
"subscription_cycle" => Ok(SubscriptionCycle),
"subscription_threshold" => Ok(SubscriptionThreshold),
"subscription_update" => Ok(SubscriptionUpdate),
"upcoming" => Ok(Upcoming),
v => {
tracing::warn!("Unknown value '{}' for enum '{}'", v, "InvoiceBillingReason");
Ok(Unknown(v.to_owned()))
}
}
}
}
impl std::fmt::Display for InvoiceBillingReason {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
f.write_str(self.as_str())
}
}
#[cfg(not(feature = "redact-generated-debug"))]
impl std::fmt::Debug for InvoiceBillingReason {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
f.write_str(self.as_str())
}
}
#[cfg(feature = "redact-generated-debug")]
impl std::fmt::Debug for InvoiceBillingReason {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
f.debug_struct(stringify!(InvoiceBillingReason)).finish_non_exhaustive()
}
}
#[cfg(feature = "serialize")]
impl serde::Serialize for InvoiceBillingReason {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
serializer.serialize_str(self.as_str())
}
}
impl miniserde::Deserialize for InvoiceBillingReason {
fn begin(out: &mut Option<Self>) -> &mut dyn miniserde::de::Visitor {
crate::Place::new(out)
}
}
impl miniserde::de::Visitor for crate::Place<InvoiceBillingReason> {
fn string(&mut self, s: &str) -> miniserde::Result<()> {
use std::str::FromStr;
self.out = Some(InvoiceBillingReason::from_str(s).expect("infallible"));
Ok(())
}
}
stripe_types::impl_from_val_with_from_str!(InvoiceBillingReason);
#[cfg(feature = "deserialize")]
impl<'de> serde::Deserialize<'de> for InvoiceBillingReason {
fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
use std::str::FromStr;
let s: std::borrow::Cow<'de, str> = serde::Deserialize::deserialize(deserializer)?;
Ok(Self::from_str(&s).expect("infallible"))
}
}
#[derive(Clone, Eq, PartialEq)]
#[non_exhaustive]
pub enum InvoiceCustomerTaxExempt {
Exempt,
None,
Reverse,
Unknown(String),
}
impl InvoiceCustomerTaxExempt {
pub fn as_str(&self) -> &str {
use InvoiceCustomerTaxExempt::*;
match self {
Exempt => "exempt",
None => "none",
Reverse => "reverse",
Unknown(v) => v,
}
}
}
impl std::str::FromStr for InvoiceCustomerTaxExempt {
type Err = std::convert::Infallible;
fn from_str(s: &str) -> Result<Self, Self::Err> {
use InvoiceCustomerTaxExempt::*;
match s {
"exempt" => Ok(Exempt),
"none" => Ok(None),
"reverse" => Ok(Reverse),
v => {
tracing::warn!("Unknown value '{}' for enum '{}'", v, "InvoiceCustomerTaxExempt");
Ok(Unknown(v.to_owned()))
}
}
}
}
impl std::fmt::Display for InvoiceCustomerTaxExempt {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
f.write_str(self.as_str())
}
}
#[cfg(not(feature = "redact-generated-debug"))]
impl std::fmt::Debug for InvoiceCustomerTaxExempt {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
f.write_str(self.as_str())
}
}
#[cfg(feature = "redact-generated-debug")]
impl std::fmt::Debug for InvoiceCustomerTaxExempt {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
f.debug_struct(stringify!(InvoiceCustomerTaxExempt)).finish_non_exhaustive()
}
}
#[cfg(feature = "serialize")]
impl serde::Serialize for InvoiceCustomerTaxExempt {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
serializer.serialize_str(self.as_str())
}
}
impl miniserde::Deserialize for InvoiceCustomerTaxExempt {
fn begin(out: &mut Option<Self>) -> &mut dyn miniserde::de::Visitor {
crate::Place::new(out)
}
}
impl miniserde::de::Visitor for crate::Place<InvoiceCustomerTaxExempt> {
fn string(&mut self, s: &str) -> miniserde::Result<()> {
use std::str::FromStr;
self.out = Some(InvoiceCustomerTaxExempt::from_str(s).expect("infallible"));
Ok(())
}
}
stripe_types::impl_from_val_with_from_str!(InvoiceCustomerTaxExempt);
#[cfg(feature = "deserialize")]
impl<'de> serde::Deserialize<'de> for InvoiceCustomerTaxExempt {
fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
use std::str::FromStr;
let s: std::borrow::Cow<'de, str> = serde::Deserialize::deserialize(deserializer)?;
Ok(Self::from_str(&s).expect("infallible"))
}
}
impl stripe_types::Object for Invoice {
type Id = Option<stripe_shared::InvoiceId>;
fn id(&self) -> &Self::Id {
&self.id
}
fn into_id(self) -> Self::Id {
self.id
}
}
stripe_types::def_id!(InvoiceId);
#[derive(Clone, Eq, PartialEq)]
#[non_exhaustive]
pub enum InvoiceCollectionMethod {
ChargeAutomatically,
SendInvoice,
Unknown(String),
}
impl InvoiceCollectionMethod {
pub fn as_str(&self) -> &str {
use InvoiceCollectionMethod::*;
match self {
ChargeAutomatically => "charge_automatically",
SendInvoice => "send_invoice",
Unknown(v) => v,
}
}
}
impl std::str::FromStr for InvoiceCollectionMethod {
type Err = std::convert::Infallible;
fn from_str(s: &str) -> Result<Self, Self::Err> {
use InvoiceCollectionMethod::*;
match s {
"charge_automatically" => Ok(ChargeAutomatically),
"send_invoice" => Ok(SendInvoice),
v => {
tracing::warn!("Unknown value '{}' for enum '{}'", v, "InvoiceCollectionMethod");
Ok(Unknown(v.to_owned()))
}
}
}
}
impl std::fmt::Display for InvoiceCollectionMethod {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
f.write_str(self.as_str())
}
}
#[cfg(not(feature = "redact-generated-debug"))]
impl std::fmt::Debug for InvoiceCollectionMethod {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
f.write_str(self.as_str())
}
}
#[cfg(feature = "redact-generated-debug")]
impl std::fmt::Debug for InvoiceCollectionMethod {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
f.debug_struct(stringify!(InvoiceCollectionMethod)).finish_non_exhaustive()
}
}
impl serde::Serialize for InvoiceCollectionMethod {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
serializer.serialize_str(self.as_str())
}
}
impl miniserde::Deserialize for InvoiceCollectionMethod {
fn begin(out: &mut Option<Self>) -> &mut dyn miniserde::de::Visitor {
crate::Place::new(out)
}
}
impl miniserde::de::Visitor for crate::Place<InvoiceCollectionMethod> {
fn string(&mut self, s: &str) -> miniserde::Result<()> {
use std::str::FromStr;
self.out = Some(InvoiceCollectionMethod::from_str(s).expect("infallible"));
Ok(())
}
}
stripe_types::impl_from_val_with_from_str!(InvoiceCollectionMethod);
#[cfg(feature = "deserialize")]
impl<'de> serde::Deserialize<'de> for InvoiceCollectionMethod {
fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
use std::str::FromStr;
let s: std::borrow::Cow<'de, str> = serde::Deserialize::deserialize(deserializer)?;
Ok(Self::from_str(&s).expect("infallible"))
}
}
#[derive(Clone, Eq, PartialEq)]
#[non_exhaustive]
pub enum InvoiceStatus {
Draft,
Open,
Paid,
Uncollectible,
Void,
Unknown(String),
}
impl InvoiceStatus {
pub fn as_str(&self) -> &str {
use InvoiceStatus::*;
match self {
Draft => "draft",
Open => "open",
Paid => "paid",
Uncollectible => "uncollectible",
Void => "void",
Unknown(v) => v,
}
}
}
impl std::str::FromStr for InvoiceStatus {
type Err = std::convert::Infallible;
fn from_str(s: &str) -> Result<Self, Self::Err> {
use InvoiceStatus::*;
match s {
"draft" => Ok(Draft),
"open" => Ok(Open),
"paid" => Ok(Paid),
"uncollectible" => Ok(Uncollectible),
"void" => Ok(Void),
v => {
tracing::warn!("Unknown value '{}' for enum '{}'", v, "InvoiceStatus");
Ok(Unknown(v.to_owned()))
}
}
}
}
impl std::fmt::Display for InvoiceStatus {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
f.write_str(self.as_str())
}
}
#[cfg(not(feature = "redact-generated-debug"))]
impl std::fmt::Debug for InvoiceStatus {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
f.write_str(self.as_str())
}
}
#[cfg(feature = "redact-generated-debug")]
impl std::fmt::Debug for InvoiceStatus {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
f.debug_struct(stringify!(InvoiceStatus)).finish_non_exhaustive()
}
}
impl serde::Serialize for InvoiceStatus {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
serializer.serialize_str(self.as_str())
}
}
impl miniserde::Deserialize for InvoiceStatus {
fn begin(out: &mut Option<Self>) -> &mut dyn miniserde::de::Visitor {
crate::Place::new(out)
}
}
impl miniserde::de::Visitor for crate::Place<InvoiceStatus> {
fn string(&mut self, s: &str) -> miniserde::Result<()> {
use std::str::FromStr;
self.out = Some(InvoiceStatus::from_str(s).expect("infallible"));
Ok(())
}
}
stripe_types::impl_from_val_with_from_str!(InvoiceStatus);
#[cfg(feature = "deserialize")]
impl<'de> serde::Deserialize<'de> for InvoiceStatus {
fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
use std::str::FromStr;
let s: std::borrow::Cow<'de, str> = serde::Deserialize::deserialize(deserializer)?;
Ok(Self::from_str(&s).expect("infallible"))
}
}