#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
use finance_query::Ticker;
let ticker = Ticker::new("MSFT").await?;
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);
}
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);
}
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(())
}