use finance_query_core::{FetchClient, YahooAuthManager, YahooFinanceClient};
use std::sync::Arc;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let proxy = std::env::var("PROXY_URL").ok();
let fetch_client = Arc::new(FetchClient::new(proxy.clone())?);
let cookie_jar = fetch_client.cookie_jar().clone();
let auth_manager = Arc::new(YahooAuthManager::new(proxy, cookie_jar));
let client = YahooFinanceClient::new(auth_manager.clone(), fetch_client);
auth_manager.refresh().await?;
println!("Fetching stock actions for AAPL...\n");
let actions = client.get_actions("AAPL", "5y").await?;
println!("=== Dividends (last 10) ===");
for dividend in actions.dividends.iter().rev().take(10) {
println!(
"{}: ${:.4}",
dividend.date.format("%Y-%m-%d"),
dividend.amount
);
}
println!("\nTotal dividends: ${:.2}", actions.total_dividends());
println!("\n=== Stock Splits ===");
if actions.splits.is_empty() {
println!("No splits in the last 5 years");
} else {
for split in &actions.splits {
println!(
"{}: {} ({}:{})",
split.date.format("%Y-%m-%d"),
split.split_ratio,
split.numerator,
split.denominator
);
}
}
println!("\n=== Capital Gains ===");
if actions.capital_gains.is_empty() {
println!("No capital gains (not an ETF/Mutual Fund)");
} else {
for gain in &actions.capital_gains {
println!("{}: ${:.4}", gain.date.format("%Y-%m-%d"), gain.amount);
}
}
Ok(())
}