finance_query/providers/adapter/
markets.rs1use super::super::Operation;
4use crate::error::Result;
5
6use super::ProviderCore;
7
8#[async_trait::async_trait]
11pub trait DiscoveryProvider: ProviderCore {
12 async fn fetch_symbol_search(
14 &self,
15 query: &str,
16 limit: u32,
17 ) -> Result<Vec<crate::models::discovery::reference::SymbolMatch>>;
18
19 async fn fetch_symbol_details(
21 &self,
22 _symbol: &str,
23 ) -> Result<crate::models::discovery::reference::SymbolDetails> {
24 Err(self.not_supported(Operation::SymbolDetails))
25 }
26
27 async fn fetch_exchanges(
29 &self,
30 ) -> Result<Vec<crate::models::discovery::reference::ExchangeInfo>> {
31 Err(self.not_supported(Operation::Exchanges))
32 }
33
34 async fn fetch_screener(
36 &self,
37 _filters: &crate::models::discovery::reference::ScreenerFilters,
38 ) -> Result<Vec<crate::models::discovery::reference::ScreenerMatch>> {
39 Err(self.not_supported(Operation::Screener))
40 }
41
42 async fn fetch_listing_status(
48 &self,
49 _active: bool,
50 ) -> Result<Vec<crate::models::discovery::reference::SymbolMatch>> {
51 Err(self.not_supported(Operation::ListingStatus))
52 }
53}
54
55#[async_trait::async_trait]
57pub trait CalendarProvider: ProviderCore {
58 async fn fetch_market_calendar(
64 &self,
65 kind: crate::models::calendar::market::CalendarKind,
66 from: &str,
67 to: &str,
68 ) -> Result<Vec<crate::models::calendar::market::MarketCalendarEntry>>;
69}
70
71#[async_trait::async_trait]
77pub trait MarketProvider: ProviderCore {
78 async fn fetch_market_movers(
80 &self,
81 direction: crate::models::market::performance::MoverDirection,
82 ) -> Result<Vec<crate::models::market::performance::MoverQuote>>;
83
84 async fn fetch_sector_performance(
86 &self,
87 ) -> Result<Vec<crate::models::market::performance::SectorPerformance>> {
88 Err(self.not_supported(Operation::SectorPerformance))
89 }
90
91 async fn fetch_sector_performance_history(
93 &self,
94 _limit: u32,
95 ) -> Result<Vec<crate::models::market::performance::SectorPerformanceHistory>> {
96 Err(self.not_supported(Operation::SectorPerformanceHistory))
97 }
98
99 async fn fetch_sector_pe(&self) -> Result<Vec<crate::models::market::performance::SectorPe>> {
101 Err(self.not_supported(Operation::SectorPerformance))
102 }
103
104 async fn fetch_industry_pe(
111 &self,
112 ) -> Result<Vec<crate::models::market::performance::IndustryPe>> {
113 Err(self.not_supported(Operation::SectorPerformance))
114 }
115}
116
117#[async_trait::async_trait]
119pub trait CryptoProvider: ProviderCore {
120 async fn fetch_crypto_quote(
122 &self,
123 id: &str,
124 vs_currency: &str,
125 ) -> Result<crate::models::crypto::CryptoQuote>;
126
127 #[cfg(feature = "defi")]
129 async fn fetch_protocol_tvl(
130 &self,
131 _protocol: &str,
132 ) -> Result<crate::models::crypto::defi::ProtocolTvl> {
133 Err(self.not_supported(Operation::ProtocolTvl))
134 }
135
136 #[cfg(feature = "defi")]
138 async fn fetch_protocol_tvl_history(
139 &self,
140 _protocol: &str,
141 ) -> Result<Vec<crate::models::crypto::defi::TvlPoint>> {
142 Err(self.not_supported(Operation::ProtocolTvlHistory))
143 }
144
145 #[cfg(feature = "crypto")]
147 async fn fetch_crypto_trending(&self) -> Result<Vec<crate::models::crypto::TrendingCoin>> {
148 Err(self.not_supported(Operation::CryptoTrending))
149 }
150
151 #[cfg(feature = "crypto")]
153 async fn fetch_crypto_global(&self) -> Result<crate::models::crypto::GlobalCryptoStats> {
154 Err(self.not_supported(Operation::CryptoGlobal))
155 }
156
157 async fn fetch_crypto_news(
159 &self,
160 _limit: u32,
161 ) -> Result<Vec<crate::models::corporate::news::News>> {
162 Err(self.not_supported(Operation::CryptoNews))
163 }
164}
165
166#[async_trait::async_trait]
168pub trait EconomicProvider: ProviderCore {
169 async fn fetch_economic_series(
171 &self,
172 series_id: &str,
173 ) -> Result<crate::models::economic::EconomicSeries>;
174
175 async fn fetch_economic_series_as_of(
183 &self,
184 _series_id: &str,
185 _date: &str,
186 ) -> Result<crate::models::economic::EconomicSeries> {
187 Err(self.not_supported(Operation::EconomicSeriesAsOf))
188 }
189
190 async fn fetch_economic_search(
197 &self,
198 _query: &str,
199 _limit: u32,
200 ) -> Result<Vec<crate::models::economic::EconomicSeriesMatch>> {
201 Err(self.not_supported(Operation::EconomicSearch))
202 }
203
204 async fn fetch_economic_categories(
209 &self,
210 _parent_id: i64,
211 ) -> Result<Vec<crate::models::economic::EconomicCategory>> {
212 Err(self.not_supported(Operation::EconomicCategories))
213 }
214
215 async fn fetch_economic_releases(
220 &self,
221 ) -> Result<Vec<crate::models::economic::EconomicRelease>> {
222 Err(self.not_supported(Operation::EconomicReleases))
223 }
224}
225
226#[async_trait::async_trait]
228pub trait ForexProvider: ProviderCore {
229 async fn fetch_forex_quote(
231 &self,
232 from: &str,
233 to: &str,
234 ) -> Result<crate::models::forex::ForexQuote>;
235
236 async fn fetch_forex_news(
238 &self,
239 _limit: u32,
240 ) -> Result<Vec<crate::models::corporate::news::News>> {
241 Err(self.not_supported(Operation::ForexNews))
242 }
243}
244
245#[async_trait::async_trait]
247pub trait IndicesProvider: ProviderCore {
248 async fn fetch_indices_quote(&self, symbol: &str)
250 -> Result<crate::models::indices::IndexQuote>;
251
252 async fn fetch_index_constituents(
254 &self,
255 _index: crate::models::indices::MajorIndex,
256 ) -> Result<Vec<crate::models::indices::IndexConstituent>> {
257 Err(self.not_supported(Operation::IndexConstituents))
258 }
259
260 async fn fetch_index_constituent_changes(
262 &self,
263 _index: crate::models::indices::MajorIndex,
264 ) -> Result<Vec<crate::models::indices::IndexConstituentChange>> {
265 Err(self.not_supported(Operation::IndexConstituentChanges))
266 }
267}
268
269#[async_trait::async_trait]
271pub trait FuturesProvider: ProviderCore {
272 async fn fetch_futures_quote(
274 &self,
275 symbol: &str,
276 ) -> Result<crate::models::futures::FuturesQuote>;
277
278 #[cfg(feature = "cftc")]
281 async fn fetch_commitments_of_traders(
282 &self,
283 _symbol: &str,
284 ) -> Result<crate::models::futures::cot::CommitmentsOfTraders> {
285 Err(self.not_supported(Operation::CommitmentsOfTraders))
286 }
287}
288
289#[async_trait::async_trait]
291pub trait CommoditiesProvider: ProviderCore {
292 async fn fetch_commodities_quote(
294 &self,
295 symbol: &str,
296 ) -> Result<crate::models::commodities::CommodityQuote>;
297}