finance_query/adapters/polygon/
benzinga.rs1use serde::{Deserialize, Serialize};
4
5use crate::error::Result;
6
7use super::build_client;
8use super::models::PaginatedResponse;
9
10#[derive(Debug, Clone, Serialize, Deserialize)]
12#[non_exhaustive]
13pub struct AnalystRating {
14 pub ticker: Option<String>,
16 pub analyst: Option<String>,
18 pub analyst_firm: Option<String>,
20 pub action: Option<String>,
22 pub rating: Option<String>,
24 pub prior_rating: Option<String>,
26 pub target_price: Option<f64>,
28 pub prior_target_price: Option<f64>,
30 pub date: Option<String>,
32 pub url: Option<String>,
34}
35
36#[derive(Debug, Clone, Serialize, Deserialize)]
38#[non_exhaustive]
39pub struct AnalystInsight {
40 pub ticker: Option<String>,
42 pub analyst: Option<String>,
44 pub analyst_firm: Option<String>,
46 pub insight_type: Option<String>,
48 pub rating: Option<String>,
50 pub rationale: Option<String>,
52 pub target_price: Option<f64>,
54 pub date: Option<String>,
56}
57
58#[derive(Debug, Clone, Serialize, Deserialize)]
60#[non_exhaustive]
61pub struct AnalystDetail {
62 pub analyst_name: Option<String>,
64 pub firm_name: Option<String>,
66 pub analyst_id: Option<String>,
68 pub firm_id: Option<String>,
70 pub ratings_count: Option<u32>,
72}
73
74#[derive(Debug, Clone, Serialize, Deserialize)]
76#[non_exhaustive]
77pub struct BullBear {
78 pub ticker: Option<String>,
80 pub bull_case: Option<String>,
82 pub bear_case: Option<String>,
84 pub date: Option<String>,
86}
87
88#[derive(Debug, Clone, Serialize, Deserialize)]
90#[non_exhaustive]
91pub struct ConsensusRating {
92 pub ticker: Option<String>,
94 pub buy: Option<u32>,
96 pub hold: Option<u32>,
98 pub sell: Option<u32>,
100 pub strong_buy: Option<u32>,
102 pub strong_sell: Option<u32>,
104 pub target_price: Option<f64>,
106 pub target_high: Option<f64>,
108 pub target_low: Option<f64>,
110}
111
112#[derive(Debug, Clone, Serialize, Deserialize)]
114#[non_exhaustive]
115pub struct CorporateGuidance {
116 pub ticker: Option<String>,
118 pub eps_guidance: Option<f64>,
120 pub revenue_guidance: Option<f64>,
122 pub period: Option<String>,
124 pub date: Option<String>,
126}
127
128#[derive(Debug, Clone, Serialize, Deserialize)]
130#[non_exhaustive]
131pub struct EarningsAnnouncement {
132 pub ticker: Option<String>,
134 pub name: Option<String>,
136 pub date: Option<String>,
138 pub quarter: Option<String>,
140 pub eps_actual: Option<f64>,
142 pub eps_estimate: Option<f64>,
144 pub revenue_actual: Option<f64>,
146 pub revenue_estimate: Option<f64>,
148}
149
150#[derive(Debug, Clone, Serialize, Deserialize)]
152#[non_exhaustive]
153pub struct FirmDetail {
154 pub name: Option<String>,
156 pub id: Option<String>,
158 pub analysts_count: Option<u32>,
160}
161
162pub async fn analyst_ratings(params: &[(&str, &str)]) -> Result<PaginatedResponse<AnalystRating>> {
164 let client = build_client()?;
165 client
166 .get("/v2/reference/news/benzinga/analyst-ratings", params)
167 .await
168}
169
170pub async fn analyst_insights(
172 params: &[(&str, &str)],
173) -> Result<PaginatedResponse<AnalystInsight>> {
174 let client = build_client()?;
175 client
176 .get("/v2/reference/news/benzinga/analyst-insights", params)
177 .await
178}
179
180pub async fn analyst_details(params: &[(&str, &str)]) -> Result<PaginatedResponse<AnalystDetail>> {
182 let client = build_client()?;
183 client
184 .get("/v2/reference/news/benzinga/analyst-details", params)
185 .await
186}
187
188pub async fn bulls_bears(params: &[(&str, &str)]) -> Result<PaginatedResponse<BullBear>> {
190 let client = build_client()?;
191 client
192 .get("/v2/reference/news/benzinga/bulls-bears-say", params)
193 .await
194}
195
196pub async fn consensus_ratings(
198 params: &[(&str, &str)],
199) -> Result<PaginatedResponse<ConsensusRating>> {
200 let client = build_client()?;
201 client
202 .get("/v2/reference/news/benzinga/consensus-ratings", params)
203 .await
204}
205
206pub async fn corporate_guidance(
208 params: &[(&str, &str)],
209) -> Result<PaginatedResponse<CorporateGuidance>> {
210 let client = build_client()?;
211 client
212 .get("/v2/reference/news/benzinga/corporate-guidance", params)
213 .await
214}
215
216pub async fn benzinga_earnings(
218 params: &[(&str, &str)],
219) -> Result<PaginatedResponse<EarningsAnnouncement>> {
220 let client = build_client()?;
221 client
222 .get("/v2/reference/news/benzinga/earnings", params)
223 .await
224}
225
226pub async fn firm_details(params: &[(&str, &str)]) -> Result<PaginatedResponse<FirmDetail>> {
228 let client = build_client()?;
229 client
230 .get("/v2/reference/news/benzinga/firm-details", params)
231 .await
232}