speedrun-api 1.3.0

A wrapper for the speedrun.com REST API
Documentation
use futures::{StreamExt, TryStreamExt};
use speedrun_api::{
    api::{
        games::{
            Game, GameCategories, GameDerivedGames, GameLevels, GameRecords, GameVariables, Games,
            LeaderboardScope,
        },
        AsyncQuery, PagedEndpointExt,
    },
    error::SpeedrunApiResult,
    types, SpeedrunApiBuilder,
};

#[tokio::main]
pub async fn main() -> SpeedrunApiResult<()> {
    env_logger::init();

    let client = SpeedrunApiBuilder::new().build_async()?;

    let endpoint = Games::builder().build().unwrap();
    let games: Vec<types::Game> = endpoint.stream(&client).take(40).try_collect().await?;
    println!("{games:#?}");

    let endpoint = Game::builder().id("v1pxjz68").build().unwrap();
    let game: types::Game = endpoint.query_async(&client).await?;
    println!("{game:#?}");

    let endpoint = Game::builder().id("sms").build().unwrap();
    let game: types::Game = endpoint.query_async(&client).await?;
    println!("{game:#?}");

    let endpoint = GameCategories::builder().id("v1pxjz68").build().unwrap();
    let categories: Vec<types::Category> = endpoint.query_async(&client).await?;
    println!("{categories:#?}");

    let endpoint = GameCategories::builder()
        .id("v1pxjz68")
        .miscellaneous(false)
        .build()
        .unwrap();
    let categories: Vec<types::Category> = endpoint.query_async(&client).await?;
    println!("{categories:#?}");

    let endpoint = GameLevels::builder().id("v1pxjz68").build().unwrap();
    let categories: Vec<types::Level> = endpoint.query_async(&client).await?;
    println!("{categories:#?}");

    let endpoint = GameVariables::builder().id("kyd4pxde").build().unwrap();
    let categories: Vec<types::Variable> = endpoint.query_async(&client).await?;
    println!("{categories:#?}");

    let endpoint = GameDerivedGames::builder().id("pd0wq31e").build().unwrap();
    let derived_games: Vec<types::Game> = endpoint.stream(&client).take(40).try_collect().await?;
    println!("{derived_games:#?}");

    let endpoint = GameRecords::builder()
        .id("pd0wq31e")
        .miscellaneous(false)
        .scope(LeaderboardScope::FullGame)
        .build()
        .unwrap();
    let records: Vec<types::Leaderboard> = endpoint.stream(&client).try_collect().await?;
    println!("{records:#?}");

    Ok(())
}