use serde::{Deserialize, Deserializer, Serialize};
use crate::{
codecs::DynamicObject,
query::FiscalPeriod,
types::{CalendarYear, CurrencyCode, Date, Ticker},
};
fn required_option<'de, D, T>(deserializer: D) -> Result<Option<T>, D::Error>
where
D: Deserializer<'de>,
T: Deserialize<'de>,
{
Option::<T>::deserialize(deserializer)
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[non_exhaustive]
#[serde(rename_all = "camelCase")]
pub struct AsReportedFinancialStatement {
pub symbol: Ticker,
pub fiscal_year: CalendarYear,
pub period: FiscalPeriod,
#[serde(deserialize_with = "required_option")]
pub reported_currency: Option<CurrencyCode>,
pub date: Date,
pub data: DynamicObject,
}