questrade_client/lib.rs
1//! Async Rust client for the [Questrade REST API](https://www.questrade.com/api/documentation/getting-started).
2//!
3//! Handles OAuth token refresh, typed market-data access (quotes, option
4//! chains, candles), and account-data access (positions, balances, activities).
5//!
6//! ## Quick start
7//!
8//! ```no_run
9//! use questrade_client::{TokenManager, QuestradeClient};
10//!
11//! # #[tokio::main]
12//! # async fn main() -> Result<(), Box<dyn std::error::Error>> {
13//! let manager = TokenManager::new(
14//! "your_refresh_token".to_string(),
15//! false, // false = live account, true = practice account
16//! None, // optional token-refresh callback
17//! None, // optional cached token to skip initial refresh
18//! ).await?;
19//!
20//! let client = QuestradeClient::new(manager)?;
21//! let accounts = client.get_accounts().await?;
22//! println!("accounts: {:?}", accounts);
23//! # Ok(())
24//! # }
25//! ```
26//!
27//! ## Token persistence
28//!
29//! Questrade refresh tokens are **single-use**. Pass an [`OnTokenRefresh`]
30//! callback to [`TokenManager::new`] to persist the rotated token after every
31//! automatic refresh so your next session can authenticate successfully.
32
33#![deny(missing_docs)]
34
35pub mod api_types;
36pub mod auth;
37pub mod client;
38pub mod error;
39
40pub use auth::{CachedToken, OnTokenRefresh, TokenManager, TokenResponse};
41pub use client::{QuestradeClient, QuestradeClientBuilder};
42pub use error::{QuestradeError, Result};