use serde_derive::{Deserialize, Serialize};
use crate::ids::TaxIdId;
use crate::params::{Expandable, Object, Timestamp};
use crate::resources::Customer;
#[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 {
AeTrn,
AuAbn,
BrCnpj,
BrCpf,
CaBn,
CaQst,
ChVat,
ClTin,
EsCif,
EuVat,
GbVat,
HkBr,
IdNpwp,
InGst,
JpCn,
JpRn,
KrBrn,
LiUid,
MxRfc,
MyFrp,
MyItn,
MySst,
NoVat,
NzGst,
RuInn,
RuKpp,
SaVat,
SgGst,
SgUen,
ThVat,
TwVat,
Unknown,
UsEin,
ZaVat,
}
impl TaxIdType {
pub fn as_str(self) -> &'static str {
match self {
TaxIdType::AeTrn => "ae_trn",
TaxIdType::AuAbn => "au_abn",
TaxIdType::BrCnpj => "br_cnpj",
TaxIdType::BrCpf => "br_cpf",
TaxIdType::CaBn => "ca_bn",
TaxIdType::CaQst => "ca_qst",
TaxIdType::ChVat => "ch_vat",
TaxIdType::ClTin => "cl_tin",
TaxIdType::EsCif => "es_cif",
TaxIdType::EuVat => "eu_vat",
TaxIdType::GbVat => "gb_vat",
TaxIdType::HkBr => "hk_br",
TaxIdType::IdNpwp => "id_npwp",
TaxIdType::InGst => "in_gst",
TaxIdType::JpCn => "jp_cn",
TaxIdType::JpRn => "jp_rn",
TaxIdType::KrBrn => "kr_brn",
TaxIdType::LiUid => "li_uid",
TaxIdType::MxRfc => "mx_rfc",
TaxIdType::MyFrp => "my_frp",
TaxIdType::MyItn => "my_itn",
TaxIdType::MySst => "my_sst",
TaxIdType::NoVat => "no_vat",
TaxIdType::NzGst => "nz_gst",
TaxIdType::RuInn => "ru_inn",
TaxIdType::RuKpp => "ru_kpp",
TaxIdType::SaVat => "sa_vat",
TaxIdType::SgGst => "sg_gst",
TaxIdType::SgUen => "sg_uen",
TaxIdType::ThVat => "th_vat",
TaxIdType::TwVat => "tw_vat",
TaxIdType::Unknown => "unknown",
TaxIdType::UsEin => "us_ein",
TaxIdType::ZaVat => "za_vat",
}
}
}
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)
}
}