use chrono::{NaiveDate, NaiveDateTime};
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct Earnings {
#[serde(deserialize_with = "super::non_empty_string")]
pub symbol: String,
pub date: NaiveDate,
pub eps_actual: Option<f64>,
pub eps_estimated: Option<f64>,
pub revenue_actual: Option<f64>,
pub revenue_estimated: Option<f64>,
#[serde(default, deserialize_with = "super::optional_date")]
pub last_updated: Option<NaiveDate>,
}
#[derive(Clone, Debug, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct Dividend {
#[serde(deserialize_with = "super::non_empty_string")]
pub symbol: String,
pub date: NaiveDate,
#[serde(default, deserialize_with = "super::optional_date")]
pub record_date: Option<NaiveDate>,
#[serde(default, deserialize_with = "super::optional_date")]
pub payment_date: Option<NaiveDate>,
#[serde(default, deserialize_with = "super::optional_date")]
pub declaration_date: Option<NaiveDate>,
pub adj_dividend: Option<f64>,
pub dividend: f64,
#[serde(rename = "yield")]
pub dividend_yield: Option<f64>,
pub frequency: Option<String>,
}
#[derive(Clone, Debug, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct StockSplit {
#[serde(deserialize_with = "super::non_empty_string")]
pub symbol: String,
pub date: NaiveDate,
pub numerator: f64,
pub denominator: f64,
pub split_type: Option<String>,
}
#[derive(Clone, Debug, PartialEq, Deserialize, Serialize)]
pub struct EarningsTranscript {
#[serde(deserialize_with = "super::non_empty_string")]
pub symbol: String,
pub quarter: u8,
pub year: u16,
#[serde(with = "super::timestamp")]
pub date: NaiveDateTime,
pub content: String,
}
#[derive(Clone, Debug, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct NewsArticle {
pub symbol: Option<String>,
#[serde(with = "super::timestamp")]
pub published_date: NaiveDateTime,
#[serde(deserialize_with = "super::non_empty_string")]
pub title: String,
pub publisher: Option<String>,
pub image: Option<String>,
pub site: Option<String>,
pub text: Option<String>,
#[serde(deserialize_with = "super::non_empty_string")]
pub url: String,
}