#![warn(missing_docs)]
#![warn(rustdoc::missing_crate_level_docs)]
pub(crate) mod adapters;
pub mod error;
pub mod finance;
pub mod edgar {
pub use crate::adapters::edgar::{
company_facts, filing_index, init, init_with_config, resolve_cik, search, submissions,
};
}
mod backoff;
mod constants;
mod models;
#[cfg(any(feature = "risk", feature = "backtesting"))]
mod perf_metrics;
mod providers;
pub(crate) mod rate_limiter;
mod scrapers;
mod ticker;
mod tickers;
mod utils;
#[cfg(feature = "alphavantage")]
pub mod alphavantage {
pub use crate::adapters::alphavantage::{init, init_with_timeout};
}
#[cfg(feature = "fmp")]
pub mod fmp {
pub use crate::adapters::fmp::{init, init_with_timeout};
}
#[cfg(feature = "polygon")]
pub mod polygon {
pub use crate::adapters::polygon::{init, init_with_timeout};
}
#[cfg(feature = "fred")]
pub mod fred {
pub use crate::adapters::fred::{
ReleaseDate, init, init_with_timeout, release_dates, series, treasury_yields,
};
pub use crate::models::economic::{MacroObservation, MacroSeries, TreasuryYield};
}
#[cfg(feature = "crypto")]
pub mod crypto {
pub use crate::adapters::coingecko::{
CoinQuote, coin, coins, fetch_crypto_global_response as global,
fetch_crypto_trending_response as trending, fetch_symbol_search_response as search,
};
pub use crate::models::crypto::{GlobalCryptoStats, TrendingCoin};
pub use crate::models::discovery::reference::SymbolMatch;
}
#[cfg(feature = "gdelt")]
pub mod gdelt {
pub use crate::adapters::gdelt::fetch_news_response as news;
pub use crate::models::corporate::news::News;
}
#[cfg(feature = "cftc")]
pub mod cftc {
pub use crate::adapters::cftc::fetch_commitments_of_traders_response as commitments_of_traders;
pub use crate::models::futures::cot::{CommitmentsOfTraders, CotObservation};
}
#[cfg(feature = "openfigi")]
pub mod openfigi {
use crate::error::Result;
pub use crate::models::discovery::figi::{SecurityIdKind, SecurityMapping};
pub async fn resolve_cusip(cusip: &str) -> Result<Vec<SecurityMapping>> {
crate::adapters::openfigi::resolve(SecurityIdKind::Cusip, cusip).await
}
pub async fn resolve_isin(isin: &str) -> Result<Vec<SecurityMapping>> {
crate::adapters::openfigi::resolve(SecurityIdKind::Isin, isin).await
}
pub async fn resolve_sedol(sedol: &str) -> Result<Vec<SecurityMapping>> {
crate::adapters::openfigi::resolve(SecurityIdKind::Sedol, sedol).await
}
pub async fn resolve(kind: SecurityIdKind, id: &str) -> Result<Vec<SecurityMapping>> {
crate::adapters::openfigi::resolve(kind, id).await
}
pub async fn resolve_many(
kind: SecurityIdKind,
ids: &[&str],
) -> Result<Vec<Vec<SecurityMapping>>> {
crate::adapters::openfigi::resolve_many(kind, ids).await
}
}
#[cfg(feature = "defi")]
pub mod defi {
use crate::error::Result;
pub use crate::models::crypto::defi::{
ChainAllocation, ChainTvl, ProtocolTvl, StablecoinSupply, TvlPoint,
};
pub async fn chains() -> Result<Vec<ChainTvl>> {
crate::adapters::defillama::chains().await
}
pub async fn stablecoins() -> Result<Vec<StablecoinSupply>> {
crate::adapters::defillama::stablecoins().await
}
}
pub mod feeds;
#[cfg(feature = "risk")]
pub mod risk;
#[cfg(feature = "translation")]
pub mod translation;
pub mod domains;
pub use models::quote::response::QuoteSummaryResponse;
pub mod quote {
pub use crate::models::corporate::{
AssetProfile, CalendarEvents, CompanyOfficer, Earnings, EarningsHistory, EarningsTrend,
EquityPerformance, FundOwnership, FundPerformance, FundProfile, InsiderHolders,
InsiderTransactions, InstitutionOwnership, MajorHoldersBreakdown, NetSharePurchaseActivity,
RecommendationTrend, SecFilings, SummaryProfile, TopHoldings, UpgradeDowngradeHistory,
};
pub use crate::models::fundamentals::{DefaultKeyStatistics, FinancialData, SummaryDetail};
pub use crate::models::market::{IndexTrend, IndustryTrend, SectorTrend};
pub use crate::models::quote::price::Price;
pub use crate::models::quote::quote_type::QuoteTypeData;
}
pub use providers::CryptoProvider;
pub use providers::EconomicProvider;
pub use providers::ForexProvider;
pub use providers::config::{Providers, ProvidersBuilder};
pub use providers::{
CalendarProvider, ChartProvider, CommoditiesProvider, CorporateProvider, DiscoveryProvider,
FilingsProvider, FundamentalsProvider, FuturesProvider, IndicesProvider, MarketProvider,
OptionsProvider, ProviderAdapter, ProviderCore, ProviderSet, QuoteProvider, Routes,
};
pub use providers::{
Capability, CustomId, Fetch, Operation, Provider, ProviderHealth, RetryPolicy,
};
pub use async_trait::async_trait;
pub use ticker::{ClientHandle, Ticker, TickerBuilder};
pub use domains::CryptoCoin;
pub use domains::ForexPair;
pub use domains::{EconomicCatalog, EconomicIndicator};
pub use domains::Commodity;
pub use domains::Discovery;
pub use domains::Filings;
pub use domains::FuturesContract;
pub use domains::Index;
pub use domains::Snapshot;
pub use domains::Market;
pub use domains::MarketCalendar;
#[cfg(feature = "polygon")]
pub use finance::symbol_sentiment;
#[cfg(feature = "fmp")]
pub use finance::{
AnalystEstimate, AnalystRecommendation, InsiderTransaction, Period, analyst_estimates,
analyst_recommendations, insider_trading,
};
#[cfg(feature = "alphavantage")]
pub use finance::{EarningsCalendarEntry, IpoCalendarEntry, earnings_calendar, ipo_calendar};
pub use tickers::{
BatchCapitalGainsResponse, BatchChartsResponse, BatchDividendsResponse,
BatchFinancialsResponse, BatchNewsResponse, BatchOptionsResponse, BatchQuotesResponse,
BatchRecommendationsResponse, BatchSparksResponse, BatchSplitsResponse, Tickers,
TickersBuilder,
};
#[cfg(feature = "indicators")]
pub use tickers::BatchIndicatorsResponse;
pub use models::calendar::market::{CalendarDetail, CalendarKind, MarketCalendarEntry};
pub use models::discovery::reference::{
ExchangeInfo, ScreenerFilters, ScreenerMatch, SymbolDetails, SymbolMatch,
};
pub use models::market::performance::{
IndustryPe, MoverDirection, MoverQuote, SectorPe, SectorPerformance, SectorPerformanceHistory,
};
pub use error::{ErrorCategory, FinanceError, Result};
pub use finance::{LookupOptions, LookupType, SearchOptions};
pub use constants::indices::Region as IndicesRegion;
pub use constants::screeners::Screener;
pub use constants::sectors::Sector;
pub use constants::{Frequency, Interval, Region, StatementType, TimeRange, ValueFormat};
pub use models::{
calendar::{CalendarEvent, EventKind},
chart::Chart,
chart::spark::Spark,
corporate::earnings_transcript::EarningsTranscript,
corporate::governance::{EmployeeCount, ExecutiveCompensation},
corporate::news::News,
corporate::press_release::PressRelease,
corporate::recommendation::Recommendation,
corporate::transcript::{Transcript, TranscriptWithMeta},
discovery::lookup::LookupResults,
discovery::screeners::ScreenerResults,
discovery::search::SearchResults,
discovery::trending::TrendingQuote,
filings::{
CompanyFacts, CongressionalTrade, EdgarSearchResults, EdgarSubmissions, FailToDeliver,
FilingSearchFilters, FilingSearchHit, FilingSection, FilingSectionForm, InsiderTrade,
InstitutionalHolding, ProviderFiling, ProviderFilings, RiskFactor,
},
fundamentals::{
CompanyProfile, EarningsSurprise, EtfCountryWeighting, EtfHolding, EtfProfile,
EtfSectorWeighting, FinancialRatiosTtm, FinancialStatement, GradingAction, KeyMetricsTtm,
PriceTargetConsensus, PriceTargetSummary, RatingConsensus, ShareFloat, ShortInterest,
ShortVolume,
},
market::currencies::Currency,
market::exchanges::Exchange,
market::hours::MarketHours,
market::industries::IndustryData,
market::market_summary::MarketSummaryQuote,
market::sectors::SectorData,
options::Options,
quote::Quote,
sentiment::{FearAndGreed, FearGreedLabel, SymbolSentiment},
};
#[cfg(feature = "sentiment")]
pub use models::sentiment::{Sentiment, SentimentLabel, analyze as analyze_sentiment};
pub use models::commodities::CommodityQuote;
pub use models::crypto::CryptoQuote;
pub use models::economic::{
EconomicCategory, EconomicRelease, EconomicSeries, EconomicSeriesMatch,
};
pub use models::forex::ForexQuote;
pub use models::futures::FuturesQuote;
#[cfg(feature = "cftc")]
pub use models::futures::cot::{CommitmentsOfTraders, CotObservation};
pub use models::indices::{IndexConstituent, IndexConstituentChange, IndexQuote, MajorIndex};
pub use models::quote::snapshot::{AssetClass, MarketSnapshot};
pub use models::{
chart::{Candle, CapitalGain, ChartEvents, ChartMeta, Dividend, DividendAnalytics, Split},
corporate::recommendation::SimilarSymbol,
discovery::lookup::LookupQuote,
discovery::screeners::ScreenerQuote,
discovery::search::{
ResearchReport, ResearchReports, SearchNews, SearchNewsList, SearchQuote, SearchQuotes,
},
filings::filing_index::{EdgarFilingIndex, EdgarFilingIndexItem},
filings::{
CikEntry, EdgarFiling, EdgarFilingFile, EdgarFilingRecent, EdgarFilings, EdgarSearchHit,
EdgarSearchHitsContainer, EdgarSearchSource, EdgarSearchTotal, FactConcept, FactUnit,
FactsByTaxonomy,
},
market::hours::MarketTime,
market::market_summary::SparkData,
options::{Contracts, OptionChain, OptionContract, OptionsQuote},
quote::FormattedValue,
};
pub use constants::exchange_codes::ExchangeCode;
pub use constants::industries::Industry;
pub use models::discovery::screeners::{
ConditionValue, EquityField, EquityScreenerQuery, FundField, FundScreenerQuery,
LogicalOperator, Operator, QueryCondition, QueryGroup, QueryOperand, QuoteType, ScreenerField,
ScreenerFieldExt, ScreenerFundCategory, ScreenerPeerGroup, ScreenerQuery, SortType,
};
pub mod streaming;
pub mod format {
pub use crate::models::format::{Both, Pretty, Raw};
}
#[cfg(feature = "dataframe")]
pub use finance_query_derive::ToDataFrame;
#[cfg(feature = "indicators")]
pub mod indicators;
#[cfg(feature = "indicators")]
pub use indicators::{
AroonData,
BollingerBands,
BollingerBandsData,
BullBearPowerData,
CandlePattern,
DonchianChannelsData,
ElderRayData,
IchimokuData,
Indicator,
IndicatorError,
IndicatorResult,
IndicatorsSummary,
KeltnerChannelsData,
MacdData,
MacdResult,
PatternSentiment,
StochasticData,
SuperTrendData,
atr,
patterns,
};
#[cfg(feature = "backtesting")]
pub mod backtesting;
const _: () = {
const fn assert_send_sync<T: Send + Sync>() {}
let _ = assert_send_sync::<Ticker>;
let _ = assert_send_sync::<Tickers>;
};
#[cfg(all(feature = "fuzzing", feature = "housetrades"))]
#[doc(hidden)]
pub fn __fuzz_pdf_extract_lines(bytes: Vec<u8>) -> Option<Vec<String>> {
crate::adapters::housetrades::pdf::extract_lines(bytes).ok()
}
#[cfg(all(feature = "fuzzing", feature = "housetrades"))]
#[doc(hidden)]
pub fn __fuzz_pdf_unencrypted(bytes: &[u8]) {
crate::adapters::housetrades::pdf::fuzz_unencrypted(bytes);
}