use crate::ids::TaxIdId;
use crate::params::{Expandable, Object, Timestamp};
use crate::resources::Customer;
use serde_derive::{Deserialize, Serialize};
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct TaxId {
pub id: TaxIdId,
#[serde(skip_serializing_if = "Option::is_none")]
pub country: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub created: Option<Timestamp>,
#[serde(skip_serializing_if = "Option::is_none")]
pub customer: Option<Expandable<Customer>>,
#[serde(default)]
pub deleted: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub livemode: Option<bool>,
#[serde(rename = "type")]
#[serde(skip_serializing_if = "Option::is_none")]
pub type_: Option<TaxIdType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub value: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub verification: Option<TaxIdVerification>,
}
impl Object for TaxId {
type Id = TaxIdId;
fn id(&self) -> Self::Id {
self.id.clone()
}
fn object(&self) -> &'static str {
"tax_id"
}
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct TaxIdVerification {
pub status: TaxIdVerificationStatus,
#[serde(skip_serializing_if = "Option::is_none")]
pub verified_address: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub verified_name: Option<String>,
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum TaxIdType {
AuAbn,
EuVat,
InGst,
NoVat,
NzGst,
Unknown,
}
impl TaxIdType {
pub fn as_str(self) -> &'static str {
match self {
TaxIdType::AuAbn => "au_abn",
TaxIdType::EuVat => "eu_vat",
TaxIdType::InGst => "in_gst",
TaxIdType::NoVat => "no_vat",
TaxIdType::NzGst => "nz_gst",
TaxIdType::Unknown => "unknown",
}
}
}
impl AsRef<str> for TaxIdType {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for TaxIdType {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum TaxIdVerificationStatus {
Pending,
Unavailable,
Unverified,
Verified,
}
impl TaxIdVerificationStatus {
pub fn as_str(self) -> &'static str {
match self {
TaxIdVerificationStatus::Pending => "pending",
TaxIdVerificationStatus::Unavailable => "unavailable",
TaxIdVerificationStatus::Unverified => "unverified",
TaxIdVerificationStatus::Verified => "verified",
}
}
}
impl AsRef<str> for TaxIdVerificationStatus {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for TaxIdVerificationStatus {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}