#[derive(Clone)]
#[cfg_attr(not(feature = "redact-generated-debug"), derive(Debug))]
#[cfg_attr(feature = "serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "deserialize", derive(serde::Deserialize))]
pub struct LegalEntityCompany {
pub address: Option<stripe_shared::Address>,
pub address_kana: Option<stripe_shared::LegalEntityJapanAddress>,
pub address_kanji: Option<stripe_shared::LegalEntityJapanAddress>,
pub directors_provided: Option<bool>,
pub directorship_declaration: Option<stripe_shared::LegalEntityDirectorshipDeclaration>,
pub executives_provided: Option<bool>,
pub export_license_id: Option<String>,
pub export_purpose_code: Option<String>,
pub name: Option<String>,
pub name_kana: Option<String>,
pub name_kanji: Option<String>,
pub owners_provided: Option<bool>,
pub ownership_declaration: Option<stripe_shared::LegalEntityUboDeclaration>,
pub ownership_exemption_reason: Option<LegalEntityCompanyOwnershipExemptionReason>,
pub phone: Option<String>,
pub registration_date: Option<stripe_shared::LegalEntityRegistrationDate>,
pub representative_declaration: Option<stripe_shared::LegalEntityRepresentativeDeclaration>,
pub structure: Option<LegalEntityCompanyStructure>,
pub tax_id_provided: Option<bool>,
pub tax_id_registrar: Option<String>,
pub vat_id_provided: Option<bool>,
pub verification: Option<stripe_shared::LegalEntityCompanyVerification>,
}
#[cfg(feature = "redact-generated-debug")]
impl std::fmt::Debug for LegalEntityCompany {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
f.debug_struct("LegalEntityCompany").finish_non_exhaustive()
}
}
#[doc(hidden)]
pub struct LegalEntityCompanyBuilder {
address: Option<Option<stripe_shared::Address>>,
address_kana: Option<Option<stripe_shared::LegalEntityJapanAddress>>,
address_kanji: Option<Option<stripe_shared::LegalEntityJapanAddress>>,
directors_provided: Option<Option<bool>>,
directorship_declaration: Option<Option<stripe_shared::LegalEntityDirectorshipDeclaration>>,
executives_provided: Option<Option<bool>>,
export_license_id: Option<Option<String>>,
export_purpose_code: Option<Option<String>>,
name: Option<Option<String>>,
name_kana: Option<Option<String>>,
name_kanji: Option<Option<String>>,
owners_provided: Option<Option<bool>>,
ownership_declaration: Option<Option<stripe_shared::LegalEntityUboDeclaration>>,
ownership_exemption_reason: Option<Option<LegalEntityCompanyOwnershipExemptionReason>>,
phone: Option<Option<String>>,
registration_date: Option<Option<stripe_shared::LegalEntityRegistrationDate>>,
representative_declaration: Option<Option<stripe_shared::LegalEntityRepresentativeDeclaration>>,
structure: Option<Option<LegalEntityCompanyStructure>>,
tax_id_provided: Option<Option<bool>>,
tax_id_registrar: Option<Option<String>>,
vat_id_provided: Option<Option<bool>>,
verification: Option<Option<stripe_shared::LegalEntityCompanyVerification>>,
}
#[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 LegalEntityCompany {
fn begin(out: &mut Option<Self>) -> &mut dyn Visitor {
Place::new(out)
}
}
struct Builder<'a> {
out: &'a mut Option<LegalEntityCompany>,
builder: LegalEntityCompanyBuilder,
}
impl Visitor for Place<LegalEntityCompany> {
fn map(&mut self) -> Result<Box<dyn Map + '_>> {
Ok(Box::new(Builder {
out: &mut self.out,
builder: LegalEntityCompanyBuilder::deser_default(),
}))
}
}
impl MapBuilder for LegalEntityCompanyBuilder {
type Out = LegalEntityCompany;
fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
Ok(match k {
"address" => Deserialize::begin(&mut self.address),
"address_kana" => Deserialize::begin(&mut self.address_kana),
"address_kanji" => Deserialize::begin(&mut self.address_kanji),
"directors_provided" => Deserialize::begin(&mut self.directors_provided),
"directorship_declaration" => {
Deserialize::begin(&mut self.directorship_declaration)
}
"executives_provided" => Deserialize::begin(&mut self.executives_provided),
"export_license_id" => Deserialize::begin(&mut self.export_license_id),
"export_purpose_code" => Deserialize::begin(&mut self.export_purpose_code),
"name" => Deserialize::begin(&mut self.name),
"name_kana" => Deserialize::begin(&mut self.name_kana),
"name_kanji" => Deserialize::begin(&mut self.name_kanji),
"owners_provided" => Deserialize::begin(&mut self.owners_provided),
"ownership_declaration" => Deserialize::begin(&mut self.ownership_declaration),
"ownership_exemption_reason" => {
Deserialize::begin(&mut self.ownership_exemption_reason)
}
"phone" => Deserialize::begin(&mut self.phone),
"registration_date" => Deserialize::begin(&mut self.registration_date),
"representative_declaration" => {
Deserialize::begin(&mut self.representative_declaration)
}
"structure" => Deserialize::begin(&mut self.structure),
"tax_id_provided" => Deserialize::begin(&mut self.tax_id_provided),
"tax_id_registrar" => Deserialize::begin(&mut self.tax_id_registrar),
"vat_id_provided" => Deserialize::begin(&mut self.vat_id_provided),
"verification" => Deserialize::begin(&mut self.verification),
_ => <dyn Visitor>::ignore(),
})
}
fn deser_default() -> Self {
Self {
address: Some(None),
address_kana: Some(None),
address_kanji: Some(None),
directors_provided: Some(None),
directorship_declaration: Some(None),
executives_provided: Some(None),
export_license_id: Some(None),
export_purpose_code: Some(None),
name: Some(None),
name_kana: Some(None),
name_kanji: Some(None),
owners_provided: Some(None),
ownership_declaration: Some(None),
ownership_exemption_reason: Some(None),
phone: Some(None),
registration_date: Some(None),
representative_declaration: Some(None),
structure: Some(None),
tax_id_provided: Some(None),
tax_id_registrar: Some(None),
vat_id_provided: Some(None),
verification: Some(None),
}
}
fn take_out(&mut self) -> Option<Self::Out> {
let (
Some(address),
Some(address_kana),
Some(address_kanji),
Some(directors_provided),
Some(directorship_declaration),
Some(executives_provided),
Some(export_license_id),
Some(export_purpose_code),
Some(name),
Some(name_kana),
Some(name_kanji),
Some(owners_provided),
Some(ownership_declaration),
Some(ownership_exemption_reason),
Some(phone),
Some(registration_date),
Some(representative_declaration),
Some(structure),
Some(tax_id_provided),
Some(tax_id_registrar),
Some(vat_id_provided),
Some(verification),
) = (
self.address.take(),
self.address_kana.take(),
self.address_kanji.take(),
self.directors_provided,
self.directorship_declaration.take(),
self.executives_provided,
self.export_license_id.take(),
self.export_purpose_code.take(),
self.name.take(),
self.name_kana.take(),
self.name_kanji.take(),
self.owners_provided,
self.ownership_declaration.take(),
self.ownership_exemption_reason.take(),
self.phone.take(),
self.registration_date,
self.representative_declaration.take(),
self.structure.take(),
self.tax_id_provided,
self.tax_id_registrar.take(),
self.vat_id_provided,
self.verification.take(),
)
else {
return None;
};
Some(Self::Out {
address,
address_kana,
address_kanji,
directors_provided,
directorship_declaration,
executives_provided,
export_license_id,
export_purpose_code,
name,
name_kana,
name_kanji,
owners_provided,
ownership_declaration,
ownership_exemption_reason,
phone,
registration_date,
representative_declaration,
structure,
tax_id_provided,
tax_id_registrar,
vat_id_provided,
verification,
})
}
}
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 LegalEntityCompany {
type Builder = LegalEntityCompanyBuilder;
}
impl FromValueOpt for LegalEntityCompany {
fn from_value(v: Value) -> Option<Self> {
let Value::Object(obj) = v else {
return None;
};
let mut b = LegalEntityCompanyBuilder::deser_default();
for (k, v) in obj {
match k.as_str() {
"address" => b.address = FromValueOpt::from_value(v),
"address_kana" => b.address_kana = FromValueOpt::from_value(v),
"address_kanji" => b.address_kanji = FromValueOpt::from_value(v),
"directors_provided" => b.directors_provided = FromValueOpt::from_value(v),
"directorship_declaration" => {
b.directorship_declaration = FromValueOpt::from_value(v)
}
"executives_provided" => b.executives_provided = FromValueOpt::from_value(v),
"export_license_id" => b.export_license_id = FromValueOpt::from_value(v),
"export_purpose_code" => b.export_purpose_code = FromValueOpt::from_value(v),
"name" => b.name = FromValueOpt::from_value(v),
"name_kana" => b.name_kana = FromValueOpt::from_value(v),
"name_kanji" => b.name_kanji = FromValueOpt::from_value(v),
"owners_provided" => b.owners_provided = FromValueOpt::from_value(v),
"ownership_declaration" => {
b.ownership_declaration = FromValueOpt::from_value(v)
}
"ownership_exemption_reason" => {
b.ownership_exemption_reason = FromValueOpt::from_value(v)
}
"phone" => b.phone = FromValueOpt::from_value(v),
"registration_date" => b.registration_date = FromValueOpt::from_value(v),
"representative_declaration" => {
b.representative_declaration = FromValueOpt::from_value(v)
}
"structure" => b.structure = FromValueOpt::from_value(v),
"tax_id_provided" => b.tax_id_provided = FromValueOpt::from_value(v),
"tax_id_registrar" => b.tax_id_registrar = FromValueOpt::from_value(v),
"vat_id_provided" => b.vat_id_provided = FromValueOpt::from_value(v),
"verification" => b.verification = FromValueOpt::from_value(v),
_ => {}
}
}
b.take_out()
}
}
};
#[derive(Clone, Eq, PartialEq)]
#[non_exhaustive]
pub enum LegalEntityCompanyOwnershipExemptionReason {
QualifiedEntityExceedsOwnershipThreshold,
QualifiesAsFinancialInstitution,
Unknown(String),
}
impl LegalEntityCompanyOwnershipExemptionReason {
pub fn as_str(&self) -> &str {
use LegalEntityCompanyOwnershipExemptionReason::*;
match self {
QualifiedEntityExceedsOwnershipThreshold => {
"qualified_entity_exceeds_ownership_threshold"
}
QualifiesAsFinancialInstitution => "qualifies_as_financial_institution",
Unknown(v) => v,
}
}
}
impl std::str::FromStr for LegalEntityCompanyOwnershipExemptionReason {
type Err = std::convert::Infallible;
fn from_str(s: &str) -> Result<Self, Self::Err> {
use LegalEntityCompanyOwnershipExemptionReason::*;
match s {
"qualified_entity_exceeds_ownership_threshold" => {
Ok(QualifiedEntityExceedsOwnershipThreshold)
}
"qualifies_as_financial_institution" => Ok(QualifiesAsFinancialInstitution),
v => {
tracing::warn!(
"Unknown value '{}' for enum '{}'",
v,
"LegalEntityCompanyOwnershipExemptionReason"
);
Ok(Unknown(v.to_owned()))
}
}
}
}
impl std::fmt::Display for LegalEntityCompanyOwnershipExemptionReason {
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 LegalEntityCompanyOwnershipExemptionReason {
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 LegalEntityCompanyOwnershipExemptionReason {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
f.debug_struct(stringify!(LegalEntityCompanyOwnershipExemptionReason))
.finish_non_exhaustive()
}
}
#[cfg(feature = "serialize")]
impl serde::Serialize for LegalEntityCompanyOwnershipExemptionReason {
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 LegalEntityCompanyOwnershipExemptionReason {
fn begin(out: &mut Option<Self>) -> &mut dyn miniserde::de::Visitor {
crate::Place::new(out)
}
}
impl miniserde::de::Visitor for crate::Place<LegalEntityCompanyOwnershipExemptionReason> {
fn string(&mut self, s: &str) -> miniserde::Result<()> {
use std::str::FromStr;
self.out =
Some(LegalEntityCompanyOwnershipExemptionReason::from_str(s).expect("infallible"));
Ok(())
}
}
stripe_types::impl_from_val_with_from_str!(LegalEntityCompanyOwnershipExemptionReason);
#[cfg(feature = "deserialize")]
impl<'de> serde::Deserialize<'de> for LegalEntityCompanyOwnershipExemptionReason {
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 LegalEntityCompanyStructure {
FreeZoneEstablishment,
FreeZoneLlc,
GovernmentInstrumentality,
GovernmentalUnit,
IncorporatedNonProfit,
IncorporatedPartnership,
LimitedLiabilityPartnership,
Llc,
MultiMemberLlc,
PrivateCompany,
PrivateCorporation,
PrivatePartnership,
PublicCompany,
PublicCorporation,
PublicPartnership,
RegisteredCharity,
SingleMemberLlc,
SoleEstablishment,
SoleProprietorship,
TaxExemptGovernmentInstrumentality,
UnincorporatedAssociation,
UnincorporatedNonProfit,
UnincorporatedPartnership,
Unknown(String),
}
impl LegalEntityCompanyStructure {
pub fn as_str(&self) -> &str {
use LegalEntityCompanyStructure::*;
match self {
FreeZoneEstablishment => "free_zone_establishment",
FreeZoneLlc => "free_zone_llc",
GovernmentInstrumentality => "government_instrumentality",
GovernmentalUnit => "governmental_unit",
IncorporatedNonProfit => "incorporated_non_profit",
IncorporatedPartnership => "incorporated_partnership",
LimitedLiabilityPartnership => "limited_liability_partnership",
Llc => "llc",
MultiMemberLlc => "multi_member_llc",
PrivateCompany => "private_company",
PrivateCorporation => "private_corporation",
PrivatePartnership => "private_partnership",
PublicCompany => "public_company",
PublicCorporation => "public_corporation",
PublicPartnership => "public_partnership",
RegisteredCharity => "registered_charity",
SingleMemberLlc => "single_member_llc",
SoleEstablishment => "sole_establishment",
SoleProprietorship => "sole_proprietorship",
TaxExemptGovernmentInstrumentality => "tax_exempt_government_instrumentality",
UnincorporatedAssociation => "unincorporated_association",
UnincorporatedNonProfit => "unincorporated_non_profit",
UnincorporatedPartnership => "unincorporated_partnership",
Unknown(v) => v,
}
}
}
impl std::str::FromStr for LegalEntityCompanyStructure {
type Err = std::convert::Infallible;
fn from_str(s: &str) -> Result<Self, Self::Err> {
use LegalEntityCompanyStructure::*;
match s {
"free_zone_establishment" => Ok(FreeZoneEstablishment),
"free_zone_llc" => Ok(FreeZoneLlc),
"government_instrumentality" => Ok(GovernmentInstrumentality),
"governmental_unit" => Ok(GovernmentalUnit),
"incorporated_non_profit" => Ok(IncorporatedNonProfit),
"incorporated_partnership" => Ok(IncorporatedPartnership),
"limited_liability_partnership" => Ok(LimitedLiabilityPartnership),
"llc" => Ok(Llc),
"multi_member_llc" => Ok(MultiMemberLlc),
"private_company" => Ok(PrivateCompany),
"private_corporation" => Ok(PrivateCorporation),
"private_partnership" => Ok(PrivatePartnership),
"public_company" => Ok(PublicCompany),
"public_corporation" => Ok(PublicCorporation),
"public_partnership" => Ok(PublicPartnership),
"registered_charity" => Ok(RegisteredCharity),
"single_member_llc" => Ok(SingleMemberLlc),
"sole_establishment" => Ok(SoleEstablishment),
"sole_proprietorship" => Ok(SoleProprietorship),
"tax_exempt_government_instrumentality" => Ok(TaxExemptGovernmentInstrumentality),
"unincorporated_association" => Ok(UnincorporatedAssociation),
"unincorporated_non_profit" => Ok(UnincorporatedNonProfit),
"unincorporated_partnership" => Ok(UnincorporatedPartnership),
v => {
tracing::warn!(
"Unknown value '{}' for enum '{}'",
v,
"LegalEntityCompanyStructure"
);
Ok(Unknown(v.to_owned()))
}
}
}
}
impl std::fmt::Display for LegalEntityCompanyStructure {
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 LegalEntityCompanyStructure {
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 LegalEntityCompanyStructure {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
f.debug_struct(stringify!(LegalEntityCompanyStructure)).finish_non_exhaustive()
}
}
#[cfg(feature = "serialize")]
impl serde::Serialize for LegalEntityCompanyStructure {
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 LegalEntityCompanyStructure {
fn begin(out: &mut Option<Self>) -> &mut dyn miniserde::de::Visitor {
crate::Place::new(out)
}
}
impl miniserde::de::Visitor for crate::Place<LegalEntityCompanyStructure> {
fn string(&mut self, s: &str) -> miniserde::Result<()> {
use std::str::FromStr;
self.out = Some(LegalEntityCompanyStructure::from_str(s).expect("infallible"));
Ok(())
}
}
stripe_types::impl_from_val_with_from_str!(LegalEntityCompanyStructure);
#[cfg(feature = "deserialize")]
impl<'de> serde::Deserialize<'de> for LegalEntityCompanyStructure {
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"))
}
}