Skip to main content

adaq_data_stock_us/
lib.rs

1//! # adaq-data-stock-us
2//!
3//! A Rust reimplementation of Python's `yfinance` for fetching US equity market
4//! data from Yahoo Finance.
5//!
6//! - Canonical return types are strongly-typed structs (compile-time guarantees);
7//!   tabular consumers can convert via `History::to_polars()` (feature `polars`)
8//!   or `serde` (JSON, always on). See `docs/adr/0002-typed-struct-canonical.md`.
9//! - HTTP uses `primp` with Chrome TLS impersonation to avoid Yahoo rate-limiting.
10//!   See `docs/adr/0001-async-primp.md`.
11//! - Async-first, with a [`blocking`] facade for non-async callers.
12//!
13//! ```no_run
14//! use adaq_data_stock_us::{Client, HistoryOptions, Interval};
15//! # async fn run() -> adaq_data_stock_us::Result<()> {
16//! let client = Client::new()?;
17//! let hist = client.history("AAPL", &HistoryOptions::default()).await?;
18//! println!("bars: {}", hist.bars.len());
19//! # Ok(()) }
20//! ```
21
22pub mod auth;
23pub mod blocking;
24pub mod cache;
25pub mod calendars;
26pub mod client;
27pub mod config;
28pub mod domain;
29pub mod earnings;
30pub mod error;
31pub mod fundamentals;
32pub mod history;
33pub mod http;
34pub mod isin;
35pub mod json;
36pub mod live;
37pub mod lookup;
38pub mod mic;
39pub mod news;
40pub mod options;
41pub mod quote;
42pub mod screener;
43pub mod search;
44
45pub use auth::Auth;
46pub use calendars::{
47    CalendarColumn, CalendarOperand, CalendarQuery, CalendarResult, EarningsEvent, EconomicEvent,
48    IpoEvent, SplitEvent,
49};
50pub use client::{Client, DownloadResult, Ticker, TickerId, download};
51pub use config::Config;
52pub use earnings::EarningsDate;
53pub use error::{Result, YfError};
54pub use fundamentals::{Financials, Freq, Statement};
55pub use history::{
56    Actions, Bar, CapitalGain, Dividend, History, HistoryMeta, HistoryOptions, Interval, Split,
57};
58pub use http::YfSession;
59pub use isin::{isin_for_ticker, resolve_isin};
60pub use live::{LiveWebSocket, PricingData};
61pub use lookup::{LookupResult, LookupRow};
62pub use mic::{MIC_TO_YAHOO_SUFFIX, is_isin, mic_to_suffix, resolve_symbol};
63pub use news::NewsArticle;
64pub use options::{ExpirationOptions, OptionChain, OptionContract};
65pub use quote::{
66    AnalystPriceTargets, Calendar, FastInfo, FundHolding, FundsData, HolderRow, Holders, Info,
67    NamedTable, RecommendationTrend, SecFiling, Sustainability, UpgradesDowngrades,
68};
69pub use screener::{
70    ETFQuery, EquityQuery, FundQuery, Operand, Operator, Query, QueryKind, ScreenOptions,
71    ScreenerQuery, ScreenerQuote, ScreenerResult, ScreenerValue,
72};
73pub use search::{SearchNews, SearchQuote, SearchResult};
74
75/// Run a future to completion on a shared multi-thread runtime. Used by the
76/// [`blocking`] facade.
77pub fn block_on<F: std::future::Future>(f: F) -> F::Output {
78    static RT: std::sync::OnceLock<tokio::runtime::Runtime> = std::sync::OnceLock::new();
79    let rt = RT.get_or_init(|| {
80        tokio::runtime::Builder::new_multi_thread()
81            .enable_all()
82            .build()
83            .expect("failed to build tokio runtime")
84    });
85    rt.block_on(f)
86}