finance_query/providers/adapter/
equity.rs1use super::super::Operation;
4use crate::error::Result;
5use crate::models::quote::QuoteSummaryResponse;
6
7use super::ProviderCore;
8
9#[async_trait::async_trait]
11pub trait QuoteProvider: ProviderCore {
12 async fn fetch_quote(&self, symbol: &str) -> Result<QuoteSummaryResponse>;
14
15 async fn fetch_quotes_batch(&self, _: &[&str]) -> Result<Vec<(String, QuoteSummaryResponse)>> {
19 Err(self.not_supported(Operation::QuotesBatch))
20 }
21
22 async fn fetch_unified_snapshot(
30 &self,
31 _symbols: &[&str],
32 ) -> Result<Vec<crate::models::quote::snapshot::MarketSnapshot>> {
33 Err(self.not_supported(Operation::UnifiedSnapshot))
34 }
35}
36
37#[async_trait::async_trait]
39pub trait ChartProvider: ProviderCore {
40 async fn fetch_chart(
42 &self,
43 symbol: &str,
44 interval: crate::Interval,
45 range: crate::TimeRange,
46 ) -> Result<crate::models::chart::Chart>;
47
48 async fn fetch_chart_range(
50 &self,
51 _symbol: &str,
52 _interval: crate::Interval,
53 _start: i64,
54 _end: i64,
55 ) -> Result<crate::models::chart::Chart> {
56 Err(self.not_supported(Operation::ChartRange))
57 }
58
59 async fn fetch_spark(
63 &self,
64 _symbols: &[&str],
65 _interval: crate::Interval,
66 _range: crate::TimeRange,
67 ) -> Result<Vec<(String, crate::models::chart::spark::Spark)>> {
68 Err(self.not_supported(Operation::Spark))
69 }
70
71 async fn fetch_grouped_daily(
78 &self,
79 _date: &str,
80 ) -> Result<Vec<(String, crate::models::chart::Candle)>> {
81 Err(self.not_supported(Operation::GroupedDaily))
82 }
83
84 async fn fetch_crypto_grouped_daily(
92 &self,
93 _date: &str,
94 ) -> Result<Vec<(String, crate::models::chart::Candle)>> {
95 Err(self.not_supported(Operation::CryptoGroupedDaily))
96 }
97
98 async fn fetch_forex_grouped_daily(
106 &self,
107 _date: &str,
108 ) -> Result<Vec<(String, crate::models::chart::Candle)>> {
109 Err(self.not_supported(Operation::ForexGroupedDaily))
110 }
111}
112
113#[async_trait::async_trait]
115pub trait FundamentalsProvider: ProviderCore {
116 async fn fetch_financials(
118 &self,
119 symbol: &str,
120 stmt_type: crate::StatementType,
121 frequency: crate::Frequency,
122 ) -> Result<crate::models::fundamentals::FinancialStatement>;
123
124 async fn fetch_short_interest(
126 &self,
127 _symbol: &str,
128 ) -> Result<Vec<crate::models::fundamentals::ShortInterest>> {
129 Err(self.not_supported(Operation::ShortInterest))
130 }
131
132 async fn fetch_short_volume(
134 &self,
135 _symbol: &str,
136 ) -> Result<Vec<crate::models::fundamentals::ShortVolume>> {
137 Err(self.not_supported(Operation::ShortVolume))
138 }
139
140 async fn fetch_share_float(
142 &self,
143 _symbol: &str,
144 ) -> Result<crate::models::fundamentals::ShareFloat> {
145 Err(self.not_supported(Operation::ShareFloat))
146 }
147
148 async fn fetch_company_profile(
150 &self,
151 _symbol: &str,
152 ) -> Result<crate::models::fundamentals::CompanyProfile> {
153 Err(self.not_supported(Operation::CompanyProfile))
154 }
155
156 async fn fetch_price_target_consensus(
158 &self,
159 _symbol: &str,
160 ) -> Result<crate::models::fundamentals::PriceTargetConsensus> {
161 Err(self.not_supported(Operation::PriceTargetConsensus))
162 }
163
164 async fn fetch_price_target_summary(
170 &self,
171 _symbol: &str,
172 ) -> Result<crate::models::fundamentals::PriceTargetSummary> {
173 Err(self.not_supported(Operation::PriceTargetSummary))
174 }
175
176 async fn fetch_rating_consensus(
178 &self,
179 _symbol: &str,
180 ) -> Result<crate::models::fundamentals::RatingConsensus> {
181 Err(self.not_supported(Operation::RatingConsensus))
182 }
183
184 async fn fetch_key_metrics_ttm(
186 &self,
187 _symbol: &str,
188 ) -> Result<crate::models::fundamentals::KeyMetricsTtm> {
189 Err(self.not_supported(Operation::KeyMetricsTtm))
190 }
191
192 async fn fetch_ratios_ttm(
194 &self,
195 _symbol: &str,
196 ) -> Result<crate::models::fundamentals::FinancialRatiosTtm> {
197 Err(self.not_supported(Operation::RatiosTtm))
198 }
199
200 async fn fetch_etf_profile(
202 &self,
203 _symbol: &str,
204 ) -> Result<crate::models::fundamentals::EtfProfile> {
205 Err(self.not_supported(Operation::EtfProfile))
206 }
207
208 async fn fetch_earnings_surprises(
210 &self,
211 _symbol: &str,
212 ) -> Result<Vec<crate::models::fundamentals::EarningsSurprise>> {
213 Err(self.not_supported(Operation::EarningsSurprises))
214 }
215
216 async fn fetch_grading_history(
219 &self,
220 _symbol: &str,
221 ) -> Result<Vec<crate::models::fundamentals::GradingAction>> {
222 Err(self.not_supported(Operation::GradingHistory))
223 }
224}
225
226#[async_trait::async_trait]
229pub trait CorporateProvider: ProviderCore {
230 async fn fetch_news(&self, symbol: &str) -> Result<Vec<crate::models::corporate::news::News>>;
232
233 async fn fetch_events(&self, symbol: &str)
235 -> Result<crate::models::chart::events::ChartEvents>;
236
237 async fn fetch_similar_symbols(
239 &self,
240 _symbol: &str,
241 _limit: u32,
242 ) -> Result<Vec<crate::models::corporate::recommendation::SimilarSymbol>> {
243 Err(self.not_supported(Operation::Recommendations))
244 }
245
246 async fn fetch_press_releases(
248 &self,
249 _symbol: &str,
250 _limit: u32,
251 ) -> Result<Vec<crate::models::corporate::press_release::PressRelease>> {
252 Err(self.not_supported(Operation::PressReleases))
253 }
254
255 async fn fetch_earnings_transcript(
259 &self,
260 _symbol: &str,
261 _quarter: Option<&str>,
262 _year: Option<i32>,
263 ) -> Result<crate::models::corporate::earnings_transcript::EarningsTranscript> {
264 Err(self.not_supported(Operation::EarningsTranscript))
265 }
266
267 async fn fetch_executive_compensation(
269 &self,
270 _symbol: &str,
271 ) -> Result<Vec<crate::models::corporate::governance::ExecutiveCompensation>> {
272 Err(self.not_supported(Operation::ExecutiveCompensation))
273 }
274
275 async fn fetch_employee_count(
277 &self,
278 _symbol: &str,
279 ) -> Result<Vec<crate::models::corporate::governance::EmployeeCount>> {
280 Err(self.not_supported(Operation::EmployeeCount))
281 }
282}
283
284#[async_trait::async_trait]
286pub trait OptionsProvider: ProviderCore {
287 async fn fetch_options(
289 &self,
290 symbol: &str,
291 date: Option<i64>,
292 ) -> Result<crate::models::options::Options>;
293}
294
295#[async_trait::async_trait]
297pub trait FilingsProvider: ProviderCore {
298 async fn fetch_filings(&self, symbol: &str) -> Result<crate::models::filings::ProviderFilings>;
300
301 async fn fetch_filing_sections(
303 &self,
304 _accession_number: &str,
305 _form: crate::models::filings::FilingSectionForm,
306 ) -> Result<Vec<crate::models::filings::FilingSection>> {
307 Err(self.not_supported(Operation::FilingSections))
308 }
309
310 async fn fetch_risk_factors(
312 &self,
313 _symbol: &str,
314 ) -> Result<Vec<crate::models::filings::RiskFactor>> {
315 Err(self.not_supported(Operation::RiskFactors))
316 }
317
318 async fn fetch_filing_search(
324 &self,
325 _symbol: Option<&str>,
326 _query: &str,
327 _filters: &crate::models::filings::FilingSearchFilters,
328 ) -> Result<Vec<crate::models::filings::FilingSearchHit>> {
329 Err(self.not_supported(Operation::FilingSearch))
330 }
331
332 async fn fetch_insider_trades(
334 &self,
335 _symbol: &str,
336 _limit: u32,
337 ) -> Result<Vec<crate::models::filings::InsiderTrade>> {
338 Err(self.not_supported(Operation::InsiderTrades))
339 }
340
341 async fn fetch_institutional_holdings(
343 &self,
344 _symbol: &str,
345 ) -> Result<Vec<crate::models::filings::InstitutionalHolding>> {
346 Err(self.not_supported(Operation::InstitutionalHoldings))
347 }
348
349 async fn fetch_congressional_trades(
351 &self,
352 _symbol: &str,
353 ) -> Result<Vec<crate::models::filings::CongressionalTrade>> {
354 Err(self.not_supported(Operation::CongressionalTrades))
355 }
356
357 async fn fetch_fails_to_deliver(
359 &self,
360 _symbol: &str,
361 ) -> Result<Vec<crate::models::filings::FailToDeliver>> {
362 Err(self.not_supported(Operation::FailsToDeliver))
363 }
364}