the-odds-api 0.1.1

A Rust SDK for The Odds API - sports odds and scores
Documentation
//! Example usage of The Odds API SDK.

use the_odds_api::{Market, OddsFormat, Region, TheOddsApiClient};

#[tokio::main]
async fn main() -> the_odds_api::Result<()> {
    // Get API key from environment variable
    let api_key = std::env::var("ODDS_API_KEY").expect("ODDS_API_KEY environment variable not set");

    // Create the client
    let client = TheOddsApiClient::new(api_key);

    // Example 1: Get all in-season sports (free, no quota cost)
    println!("=== Sports ===");
    let sports = client.get_sports().await?;
    for sport in &sports.data {
        println!("  {} - {} (active: {})", sport.key, sport.title, sport.active);
    }
    println!();

    // Example 2: Get events for a sport (free, no quota cost)
    if let Some(sport) = sports.data.first() {
        println!("=== Events for {} ===", sport.title);
        let events = client.get_events(&sport.key).send().await?;
        for event in events.data.iter().take(5) {
            println!(
                "  {} vs {} @ {}",
                event.home_team.as_deref().unwrap_or("TBD"),
                event.away_team.as_deref().unwrap_or("TBD"),
                event.commence_time
            );
        }
        println!();
    }

    // Example 3: Get odds with various options
    println!("=== NFL Odds ===");
    let odds = client
        .get_odds("americanfootball_nfl")
        .regions(&[Region::Us])
        .markets(&[Market::H2h, Market::Spreads])
        .odds_format(OddsFormat::American)
        .send()
        .await?;

    for event in odds.data.iter().take(3) {
        println!(
            "  {} vs {}",
            event.home_team.as_deref().unwrap_or("TBD"),
            event.away_team.as_deref().unwrap_or("TBD")
        );
        for bookmaker in event.bookmakers.iter().take(2) {
            println!("    {}", bookmaker.title);
            for market in &bookmaker.markets {
                print!("      {}: ", market.key);
                for outcome in &market.outcomes {
                    print!(
                        "{} ({}{}) ",
                        outcome.name,
                        if outcome.price > 0.0 { "+" } else { "" },
                        outcome.price
                    );
                }
                println!();
            }
        }
    }

    // Print usage info
    println!();
    println!("=== API Usage ===");
    println!(
        "  Requests remaining: {:?}",
        odds.usage.requests_remaining
    );
    println!("  Requests used: {:?}", odds.usage.requests_used);
    println!("  Last request cost: {:?}", odds.usage.requests_last);

    Ok(())
}