use serde_with::serde_as;
use time::format_description::well_known::Rfc3339;
use time::OffsetDateTime;
use uuid::Uuid;
#[serde_as]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct HistoryDividendItem {
#[serde(rename = "amount")]
pub amount: f32,
#[serde(rename = "amountInEuro", skip_serializing_if = "Option::is_none")]
pub amount_in_euro: Option<f32>,
#[serde(
rename = "grossAmountPerShare",
skip_serializing_if = "Option::is_none"
)]
pub gross_amount_per_share: Option<f32>,
#[serde(rename = "paidOn")]
#[serde_as(as = "Rfc3339")]
pub paid_on: OffsetDateTime,
#[serde(rename = "quantity", skip_serializing_if = "Option::is_none")]
pub quantity: Option<f32>,
#[serde(rename = "reference")]
pub reference: Uuid,
#[serde(rename = "ticker")]
pub ticker: String,
#[serde(rename = "type")]
pub r#type: Type,
}
impl HistoryDividendItem {
#[must_use]
pub const fn new() -> Self {
Self {
amount: 0.0,
amount_in_euro: None,
gross_amount_per_share: None,
paid_on: OffsetDateTime::UNIX_EPOCH,
quantity: None,
reference: Uuid::nil(),
ticker: String::new(),
r#type: Type::Unknown,
}
}
}
impl Default for HistoryDividendItem {
fn default() -> Self {
Self::new()
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum Type {
#[serde(rename = "DIVIDEND")]
Dividend,
#[serde(rename = "ORDINARY")]
Ordinary,
#[serde(rename = "BONUS")]
Bonus,
#[serde(rename = "PROPERTY_INCOME")]
PropertyIncome,
#[serde(rename = "RETURN_OF_CAPITAL_NON_US")]
ReturnOfCapitalNonUs,
#[serde(rename = "DEMERGER")]
Demerger,
#[serde(rename = "INTEREST")]
Interest,
#[serde(rename = "CAPITAL_GAINS_DISTRIBUTION_NON_US")]
CapitalGainsDistributionNonUs,
#[serde(rename = "INTERIM_LIQUIDATION")]
InterimLiquidation,
#[serde(rename = "ORDINARY_MANUFACTURED_PAYMENT")]
OrdinaryManufacturedPayment,
#[serde(rename = "BONUS_MANUFACTURED_PAYMENT")]
BonusManufacturedPayment,
#[serde(rename = "PROPERTY_INCOME_MANUFACTURED_PAYMENT")]
PropertyIncomeManufacturedPayment,
#[serde(rename = "RETURN_OF_CAPITAL_NON_US_MANUFACTURED_PAYMENT")]
ReturnOfCapitalNonUsManufacturedPayment,
#[serde(rename = "DEMERGER_MANUFACTURED_PAYMENT")]
DemergerManufacturedPayment,
#[serde(rename = "INTEREST_MANUFACTURED_PAYMENT")]
InterestManufacturedPayment,
#[serde(rename = "CAPITAL_GAINS_DISTRIBUTION_NON_US_MANUFACTURED_PAYMENT")]
CapitalGainsDistributionNonUsManufacturedPayment,
#[serde(rename = "INTERIM_LIQUIDATION_MANUFACTURED_PAYMENT")]
InterimLiquidationManufacturedPayment,
#[serde(rename = "INTEREST_PAID_BY_US_OBLIGORS")]
InterestPaidByUsObligors,
#[serde(rename = "INTEREST_PAID_BY_FOREIGN_CORPORATIONS")]
InterestPaidByForeignCorporations,
#[serde(rename = "DIVIDENDS_PAID_BY_US_CORPORATIONS")]
DividendsPaidByUsCorporations,
#[serde(rename = "DIVIDENDS_PAID_BY_FOREIGN_CORPORATIONS")]
DividendsPaidByForeignCorporations,
#[serde(rename = "CAPITAL_GAINS")]
CapitalGains,
#[serde(rename = "REAL_PROPERTY_INCOME_AND_NATURAL_RESOURCES_ROYALTIES")]
RealPropertyIncomeAndNaturalResourcesRoyalties,
#[serde(rename = "OTHER_INCOME")]
OtherIncome,
#[serde(rename = "QUALIFIED_INVESTMENT_ENTITY")]
QualifiedInvestmentEntity,
#[serde(rename = "TRUST_DISTRIBUTION")]
TrustDistribution,
#[serde(rename = "PUBLICLY_TRADED_PARTNERSHIP_DISTRIBUTION")]
PubliclyTradedPartnershipDistribution,
#[serde(rename = "CAPITAL_GAINS_DISTRIBUTION")]
CapitalGainsDistribution,
#[serde(rename = "RETURN_OF_CAPITAL")]
ReturnOfCapital,
#[serde(rename = "OTHER_DIVIDEND_EQUIVALENT")]
OtherDividendEquivalent,
#[serde(rename = "TAX_EVENT_1446F_FOR_PUBLICLY_TRADED_SECURITIES")]
TaxEvent1446FForPubliclyTradedSecurities,
#[serde(rename = "PTP_UNCHARACTERISED_INCOME")]
PtpUncharacterisedIncome,
#[serde(rename = "MULTIPLE_1042S_TAX_COMPONENTS")]
Multiple1042STaxComponents,
#[serde(rename = "INTEREST_PAID_BY_US_OBLIGORS_MANUFACTURED_PAYMENT")]
InterestPaidByUsObligorsManufacturedPayment,
#[serde(rename = "INTEREST_PAID_BY_FOREIGN_CORPORATIONS_MANUFACTURED_PAYMENT")]
InterestPaidByForeignCorporationsManufacturedPayment,
#[serde(rename = "DIVIDENDS_PAID_BY_US_CORPORATIONS_MANUFACTURED_PAYMENT")]
DividendsPaidByUsCorporationsManufacturedPayment,
#[serde(rename = "DIVIDENDS_PAID_BY_FOREIGN_CORPORATIONS_MANUFACTURED_PAYMENT")]
DividendsPaidByForeignCorporationsManufacturedPayment,
#[serde(rename = "CAPITAL_GAINS_MANUFACTURED_PAYMENT")]
CapitalGainsManufacturedPayment,
#[serde(rename = "REAL_PROPERTY_INCOME_AND_NATURAL_RESOURCES_ROYALTIES_MANUFACTURED_PAYMENT")]
RealPropertyIncomeAndNaturalResourcesRoyaltiesManufacturedPayment,
#[serde(rename = "OTHER_INCOME_MANUFACTURED_PAYMENT")]
OtherIncomeManufacturedPayment,
#[serde(rename = "QUALIFIED_INVESTMENT_ENTITY_MANUFACTURED_PAYMENT")]
QualifiedInvestmentEntityManufacturedPayment,
#[serde(rename = "TRUST_DISTRIBUTION_MANUFACTURED_PAYMENT")]
TrustDistributionManufacturedPayment,
#[serde(rename = "PUBLICLY_TRADED_PARTNERSHIP_DISTRIBUTION_MANUFACTURED_PAYMENT")]
PubliclyTradedPartnershipDistributionManufacturedPayment,
#[serde(rename = "CAPITAL_GAINS_DISTRIBUTION_MANUFACTURED_PAYMENT")]
CapitalGainsDistributionManufacturedPayment,
#[serde(rename = "RETURN_OF_CAPITAL_MANUFACTURED_PAYMENT")]
ReturnOfCapitalManufacturedPayment,
#[serde(rename = "OTHER_DIVIDEND_EQUIVALENT_MANUFACTURED_PAYMENT")]
OtherDividendEquivalentManufacturedPayment,
#[serde(rename = "TAX_EVENT_1446F_FOR_PUBLICLY_TRADED_SECURITIES_MANUFACTURED_PAYMENT")]
TaxEvent1446FForPubliclyTradedSecuritiesManufacturedPayment,
#[serde(rename = "PTP_UNCHARACTERISED_INCOME_MANUFACTURED_PAYMENT")]
PtpUncharacterisedIncomeManufacturedPayment,
#[serde(rename = "MULTIPLE_1042S_TAX_COMPONENTS_MANUFACTURED_PAYMENT")]
Multiple1042STaxComponentsManufacturedPayment,
#[serde(rename = "PROPERTY_INCOME_DISTRIBUTION")]
PropertyIncomeDistribution,
#[serde(rename = "TAX_EXEMPTED")]
TaxExempted,
#[serde(rename = "DIVIDEND_MANUFACTURED_PAYMENT")]
DividendManufacturedPayment,
#[serde(other)]
Unknown,
}
impl Default for Type {
fn default() -> Self {
Self::Unknown
}
}