use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct EarningsTrend {
#[serde(default)]
pub default_methodology: Option<String>,
#[serde(default)]
pub max_age: Option<i64>,
#[serde(default)]
pub trend: Vec<EarningsTrendPeriod>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct EarningsTrendPeriod {
#[serde(default)]
pub end_date: Option<String>,
#[serde(default)]
pub earnings_estimate: Option<EarningsEstimate>,
#[serde(default)]
pub revenue_estimate: Option<RevenueEstimate>,
#[serde(default)]
pub eps_trend: Option<EpsTrend>,
#[serde(default)]
pub eps_revisions: Option<EpsRevisions>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct EarningsEstimate {
#[serde(default)]
pub avg: Option<crate::models::quote::FormattedValue<f64>>,
#[serde(default)]
pub low: Option<crate::models::quote::FormattedValue<f64>>,
#[serde(default)]
pub high: Option<crate::models::quote::FormattedValue<f64>>,
#[serde(default)]
pub year_ago_eps: Option<crate::models::quote::FormattedValue<f64>>,
#[serde(default)]
pub number_of_analysts: Option<crate::models::quote::FormattedValue<i64>>,
#[serde(default)]
pub growth: Option<crate::models::quote::FormattedValue<f64>>,
#[serde(default)]
pub earnings_currency: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct RevenueEstimate {
#[serde(default)]
pub avg: Option<crate::models::quote::FormattedValue<i64>>,
#[serde(default)]
pub low: Option<crate::models::quote::FormattedValue<i64>>,
#[serde(default)]
pub high: Option<crate::models::quote::FormattedValue<i64>>,
#[serde(default)]
pub number_of_analysts: Option<crate::models::quote::FormattedValue<i64>>,
#[serde(default)]
pub year_ago_revenue: Option<crate::models::quote::FormattedValue<i64>>,
#[serde(default)]
pub growth: Option<crate::models::quote::FormattedValue<f64>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct EpsTrend {
#[serde(default)]
pub current: Option<crate::models::quote::FormattedValue<f64>>,
#[serde(default)]
#[serde(rename = "7daysAgo")]
pub seven_days_ago: Option<crate::models::quote::FormattedValue<f64>>,
#[serde(default)]
#[serde(rename = "30daysAgo")]
pub thirty_days_ago: Option<crate::models::quote::FormattedValue<f64>>,
#[serde(default)]
#[serde(rename = "60daysAgo")]
pub sixty_days_ago: Option<crate::models::quote::FormattedValue<f64>>,
#[serde(default)]
#[serde(rename = "90daysAgo")]
pub ninety_days_ago: Option<crate::models::quote::FormattedValue<f64>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct EpsRevisions {
#[serde(default)]
pub up_last7days: Option<crate::models::quote::FormattedValue<i64>>,
#[serde(default)]
pub up_last30days: Option<crate::models::quote::FormattedValue<i64>>,
#[serde(default)]
#[serde(rename = "downLast7Days")]
pub down_last7_days: Option<crate::models::quote::FormattedValue<i64>>,
#[serde(default)]
pub down_last30days: Option<crate::models::quote::FormattedValue<i64>>,
#[serde(default)]
pub down_last90days: Option<crate::models::quote::FormattedValue<i64>>,
#[serde(default)]
pub eps_revisions_currency: Option<String>,
}