Skip to main content

finance_query/models/corporate/
earnings_trend.rs

1//! Earnings Trend Module
2//!
3//! Contains earnings trend and analyst estimate data.
4
5use serde::{Deserialize, Serialize};
6
7/// Earnings trend and estimates
8#[derive(Default, Debug, Clone, Serialize, Deserialize)]
9#[serde(rename_all = "camelCase")]
10#[non_exhaustive]
11pub struct EarningsTrend {
12    /// Default methodology (e.g., "gaap")
13    #[serde(default)]
14    pub default_methodology: Option<String>,
15
16    /// Maximum age of this data in seconds
17    #[serde(default)]
18    pub max_age: Option<i64>,
19
20    /// List of trend periods
21    #[serde(default)]
22    pub trend: Vec<EarningsTrendPeriod>,
23}
24
25/// Earnings trend for a specific period
26#[derive(Debug, Clone, Serialize, Deserialize)]
27#[serde(rename_all = "camelCase")]
28pub struct EarningsTrendPeriod {
29    /// End date for this period
30    #[serde(default)]
31    pub end_date: Option<String>,
32
33    /// Earnings estimates
34    #[serde(default)]
35    pub earnings_estimate: Option<EarningsEstimate>,
36
37    /// Revenue estimates
38    #[serde(default)]
39    pub revenue_estimate: Option<RevenueEstimate>,
40
41    /// EPS trend over time
42    #[serde(default)]
43    pub eps_trend: Option<EpsTrend>,
44
45    /// EPS revisions
46    #[serde(default)]
47    pub eps_revisions: Option<EpsRevisions>,
48}
49
50/// Earnings estimate data
51#[derive(Debug, Clone, Serialize, Deserialize)]
52#[serde(rename_all = "camelCase")]
53pub struct EarningsEstimate {
54    /// Average estimate
55    #[serde(default)]
56    pub avg: Option<crate::models::quote::FormattedValue<f64>>,
57
58    /// Low estimate
59    #[serde(default)]
60    pub low: Option<crate::models::quote::FormattedValue<f64>>,
61
62    /// High estimate
63    #[serde(default)]
64    pub high: Option<crate::models::quote::FormattedValue<f64>>,
65
66    /// Year-ago EPS
67    #[serde(default)]
68    pub year_ago_eps: Option<crate::models::quote::FormattedValue<f64>>,
69
70    /// Number of analysts providing estimates
71    #[serde(default)]
72    pub number_of_analysts: Option<crate::models::quote::FormattedValue<i64>>,
73
74    /// Expected growth rate
75    #[serde(default)]
76    pub growth: Option<crate::models::quote::FormattedValue<f64>>,
77
78    /// Currency for earnings
79    #[serde(default)]
80    pub earnings_currency: Option<String>,
81}
82
83/// Revenue estimate data
84#[derive(Debug, Clone, Serialize, Deserialize)]
85#[serde(rename_all = "camelCase")]
86pub struct RevenueEstimate {
87    /// Average estimate
88    #[serde(default)]
89    pub avg: Option<crate::models::quote::FormattedValue<i64>>,
90
91    /// Low estimate
92    #[serde(default)]
93    pub low: Option<crate::models::quote::FormattedValue<i64>>,
94
95    /// High estimate
96    #[serde(default)]
97    pub high: Option<crate::models::quote::FormattedValue<i64>>,
98
99    /// Number of analysts providing estimates
100    #[serde(default)]
101    pub number_of_analysts: Option<crate::models::quote::FormattedValue<i64>>,
102
103    /// Year-ago revenue
104    #[serde(default)]
105    pub year_ago_revenue: Option<crate::models::quote::FormattedValue<i64>>,
106
107    /// Expected growth rate
108    #[serde(default)]
109    pub growth: Option<crate::models::quote::FormattedValue<f64>>,
110}
111
112/// EPS trend over time
113#[derive(Debug, Clone, Serialize, Deserialize)]
114#[serde(rename_all = "camelCase")]
115pub struct EpsTrend {
116    /// Current EPS
117    #[serde(default)]
118    pub current: Option<crate::models::quote::FormattedValue<f64>>,
119
120    /// EPS 7 days ago
121    #[serde(default)]
122    #[serde(rename = "7daysAgo")]
123    pub seven_days_ago: Option<crate::models::quote::FormattedValue<f64>>,
124
125    /// EPS 30 days ago
126    #[serde(default)]
127    #[serde(rename = "30daysAgo")]
128    pub thirty_days_ago: Option<crate::models::quote::FormattedValue<f64>>,
129
130    /// EPS 60 days ago
131    #[serde(default)]
132    #[serde(rename = "60daysAgo")]
133    pub sixty_days_ago: Option<crate::models::quote::FormattedValue<f64>>,
134
135    /// EPS 90 days ago
136    #[serde(default)]
137    #[serde(rename = "90daysAgo")]
138    pub ninety_days_ago: Option<crate::models::quote::FormattedValue<f64>>,
139}
140
141/// EPS revision data
142#[derive(Debug, Clone, Serialize, Deserialize)]
143#[serde(rename_all = "camelCase")]
144pub struct EpsRevisions {
145    /// Number of upward revisions in last 7 days
146    #[serde(default)]
147    pub up_last7days: Option<crate::models::quote::FormattedValue<i64>>,
148
149    /// Number of upward revisions in last 30 days
150    #[serde(default)]
151    pub up_last30days: Option<crate::models::quote::FormattedValue<i64>>,
152
153    /// Number of downward revisions in last 7 days
154    #[serde(default)]
155    #[serde(rename = "downLast7Days")]
156    pub down_last7_days: Option<crate::models::quote::FormattedValue<i64>>,
157
158    /// Number of downward revisions in last 30 days
159    #[serde(default)]
160    pub down_last30days: Option<crate::models::quote::FormattedValue<i64>>,
161
162    /// Number of downward revisions in last 90 days
163    #[serde(default)]
164    pub down_last90days: Option<crate::models::quote::FormattedValue<i64>>,
165
166    /// Currency for EPS revisions
167    #[serde(default)]
168    pub eps_revisions_currency: Option<String>,
169}