use super::super::Capability;
use crate::error::Result;
use super::ProviderCore;
use super::equity::*;
use super::markets::*;
#[async_trait::async_trait]
pub trait ProviderAdapter: ProviderCore {
async fn initialize(&self) -> Result<()> {
Ok(())
}
fn rate_limit_remaining(&self) -> Option<f64> {
None
}
fn as_quote(&self) -> Option<&dyn QuoteProvider> {
None
}
fn as_chart(&self) -> Option<&dyn ChartProvider> {
None
}
fn as_fundamentals(&self) -> Option<&dyn FundamentalsProvider> {
None
}
fn as_corporate(&self) -> Option<&dyn CorporateProvider> {
None
}
fn as_options(&self) -> Option<&dyn OptionsProvider> {
None
}
fn as_filings(&self) -> Option<&dyn FilingsProvider> {
None
}
fn as_discovery(&self) -> Option<&dyn DiscoveryProvider> {
None
}
fn as_calendar(&self) -> Option<&dyn CalendarProvider> {
None
}
fn as_market(&self) -> Option<&dyn MarketProvider> {
None
}
fn as_crypto(&self) -> Option<&dyn CryptoProvider> {
None
}
fn as_economic(&self) -> Option<&dyn EconomicProvider> {
None
}
fn as_forex(&self) -> Option<&dyn ForexProvider> {
None
}
fn as_indices(&self) -> Option<&dyn IndicesProvider> {
None
}
fn as_futures(&self) -> Option<&dyn FuturesProvider> {
None
}
fn as_commodities(&self) -> Option<&dyn CommoditiesProvider> {
None
}
fn capabilities(&self) -> Capability {
let mut caps = Capability::NONE;
if self.as_quote().is_some() {
caps = caps | Capability::QUOTE;
}
if self.as_chart().is_some() {
caps = caps | Capability::CHART;
}
if self.as_fundamentals().is_some() {
caps = caps | Capability::FUNDAMENTALS;
}
if self.as_corporate().is_some() {
caps = caps | Capability::CORPORATE;
}
if self.as_options().is_some() {
caps = caps | Capability::OPTIONS;
}
if self.as_filings().is_some() {
caps = caps | Capability::FILINGS;
}
if self.as_market().is_some() {
caps = caps | Capability::MARKET;
}
if self.as_discovery().is_some() {
caps = caps | Capability::DISCOVERY;
}
if self.as_calendar().is_some() {
caps = caps | Capability::CALENDAR;
}
#[cfg(any(
feature = "alphavantage",
feature = "binance",
feature = "crypto",
feature = "defi",
feature = "fmp",
feature = "gdelt",
feature = "kraken",
feature = "polygon"
))]
if self.as_crypto().is_some() {
caps = caps | Capability::CRYPTO;
}
#[cfg(any(
feature = "alphavantage",
feature = "bls",
feature = "fiscaldata",
feature = "fred",
feature = "polygon",
feature = "worldbank"
))]
if self.as_economic().is_some() {
caps = caps | Capability::ECONOMIC;
}
#[cfg(any(
feature = "alphavantage",
feature = "fmp",
feature = "frankfurter",
feature = "gdelt",
feature = "polygon"
))]
if self.as_forex().is_some() {
caps = caps | Capability::FOREX;
}
if self.as_indices().is_some() {
caps = caps | Capability::INDICES;
}
if self.as_futures().is_some() {
caps = caps | Capability::FUTURES;
}
if self.as_commodities().is_some() {
caps = caps | Capability::COMMODITIES;
}
caps
}
}