finance-query 3.0.0

A Rust library for querying financial data
Documentation
// @generated by `cargo soothfast docs gen-tests`
// source: docs/library/ticker.md line 288
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    use finance_query::Ticker;

    let ticker = Ticker::new("MSFT").await?;

    // Get financial health
    if let Some(fd) = ticker.financial_data().await? {
        println!("Financials:");
        let revenue = fd.total_revenue.as_ref().and_then(|v| v.raw).unwrap_or(0) as f64;
        println!("  Revenue: ${:.2}B", revenue / 1e9);
        let profit_margins = fd
            .profit_margins
            .as_ref()
            .and_then(|v| v.raw)
            .unwrap_or(0.0);
        println!("  Profit Margin: {:.2}%", profit_margins * 100.0);
        let roe = fd
            .return_on_equity
            .as_ref()
            .and_then(|v| v.raw)
            .unwrap_or(0.0);
        println!("  ROE: {:.2}%", roe * 100.0);
        let dte = fd
            .debt_to_equity
            .as_ref()
            .and_then(|v| v.raw)
            .unwrap_or(0.0);
        println!("  Debt to Equity: {:.2}", dte);
    }

    // Get valuation
    if let Some(sd) = ticker.summary_detail().await? {
        println!("\nValuation:");
        let trailing_pe = sd.trailing_pe.as_ref().and_then(|v| v.raw).unwrap_or(0.0);
        println!("  P/E Ratio: {:.2}", trailing_pe);
        let forward_pe = sd.forward_pe.as_ref().and_then(|v| v.raw).unwrap_or(0.0);
        println!("  Forward P/E: {:.2}", forward_pe);
    }

    // Get analyst sentiment
    if let Some(rt) = ticker.recommendation_trend().await?
        && let Some(latest) = rt.trend.first()
    {
        println!("\nAnalyst Recommendations:");
        println!("  Strong Buy: {}", latest.strong_buy.unwrap_or(0));
        println!("  Buy: {}", latest.buy.unwrap_or(0));
        println!("  Hold: {}", latest.hold.unwrap_or(0));
        println!("  Sell: {}", latest.sell.unwrap_or(0));
        println!("  Strong Sell: {}", latest.strong_sell.unwrap_or(0));
    }
    Ok(())
}