pub mod auth;
pub mod blocking;
pub mod cache;
pub mod calendars;
pub mod client;
pub mod config;
pub mod domain;
pub mod earnings;
pub mod error;
pub mod fundamentals;
pub mod history;
pub mod http;
pub mod isin;
pub mod json;
pub mod live;
pub mod lookup;
pub mod mic;
pub mod news;
pub mod options;
pub mod quote;
pub mod screener;
pub mod search;
pub use auth::Auth;
pub use calendars::{
CalendarColumn, CalendarOperand, CalendarQuery, CalendarResult, EarningsEvent, EconomicEvent,
IpoEvent, SplitEvent,
};
pub use client::{Client, DownloadResult, Ticker, TickerId, download};
pub use config::Config;
pub use earnings::EarningsDate;
pub use error::{Result, YfError};
pub use fundamentals::{Financials, Freq, Statement};
pub use history::{
Actions, Bar, CapitalGain, Dividend, History, HistoryMeta, HistoryOptions, Interval, Split,
};
pub use http::YfSession;
pub use isin::{isin_for_ticker, resolve_isin};
pub use live::{LiveWebSocket, PricingData};
pub use lookup::{LookupResult, LookupRow};
pub use mic::{MIC_TO_YAHOO_SUFFIX, is_isin, mic_to_suffix, resolve_symbol};
pub use news::NewsArticle;
pub use options::{ExpirationOptions, OptionChain, OptionContract};
pub use quote::{
AnalystPriceTargets, Calendar, FastInfo, FundHolding, FundsData, HolderRow, Holders, Info,
NamedTable, RecommendationTrend, SecFiling, Sustainability, UpgradesDowngrades,
};
pub use screener::{
ETFQuery, EquityQuery, FundQuery, Operand, Operator, Query, QueryKind, ScreenOptions,
ScreenerQuery, ScreenerQuote, ScreenerResult, ScreenerValue,
};
pub use search::{SearchNews, SearchQuote, SearchResult};
pub fn block_on<F: std::future::Future>(f: F) -> F::Output {
static RT: std::sync::OnceLock<tokio::runtime::Runtime> = std::sync::OnceLock::new();
let rt = RT.get_or_init(|| {
tokio::runtime::Builder::new_multi_thread()
.enable_all()
.build()
.expect("failed to build tokio runtime")
});
rt.block_on(f)
}