1 stable release

1.0.0 Jan 24, 2023

#1368 in Asynchronous

MIT license

48KB
799 lines

Otdb-rs

An Open Trivia Database wrapper written in rust.


Overview

This crate aims to be a full-featured yet simple and easy to use wrapper.

Basic example

use otdb::prelude::{Client, Category, Difficulty};

// Let's try getting some music easy questions.
#[tokio::main]
async fn main() {
    let client = Client::new();
    
    let mut request = client.trivia();
    request.category(Category::Music)
        .difficulty(Difficulty::Easy);
    
    // Unwrapping is not a good idea, errors should be handled properly!
    let response = request.send().await.unwrap();
    
    println!("{:?}", response.results);
}

Usage in blocking contexts

This crate also provides a blocking client that can be used within contexts where async is not available. In order to use that client, the blocking feature must be enabled in your Cargo.toml, then the client can be accessed within the blocking module.

Let's take the code above and use the blocking client instead of the async one:

use otdb::prelude::{Category, Difficulty};
use otdb::blocking::Client;

// Let's try getting some music easy questions.
fn main() {
    let client = Client::new();
    
    let mut request = client.trivia();
    request.category(Category::Music)
        .difficulty(Difficulty::Easy);
    
    // Unwrapping is not a good idea, errors should be handled properly!
    let response = request.send().unwrap();
    
    println!("{:?}", response.results);
}

As we can see, all we need to do is remove async/await syntax and we're good to go!

The only difference between using the async and blocking clients is that you don't have to .await the send method in a request when using a blocking client, everything else is just the same, so switching between clients is pretty easy!

Dependencies

~7–19MB
~250K SLoC