vndb-api 1.0.2

Fully Functional Visual Novel Database (VNDB) HTTPS API Wrapper
Documentation
# Example
```rust
use dotenvy::dotenv;
use std::env;

use vndb_api::client::VndbApiClient;
use vndb_api::request::query::{QueryBuilder, VnQuery, VnField, VnFieldChoices, SortField};

#[tokio::main]
async fn main() {
    dotenv().ok();
    let api_key = env::var("API_KEY").expect("API_KEY must be set");
    let api_client = VndbApiClient::new(&String::from(api_key));

    // For more examples see the ["examples" directory]
    //      (https://github.com/demeil1/vndb-api/tree/main/examples) 
    // in the github repo

    // search for visual novel by name with autocomplete options
    let query = QueryBuilder::<VnQuery>::new()
        .filters(&r#"["search", "=", "DDLC"]"#.to_string())
        .fields(VnFieldChoices::from(vec![VnField::Title]))
        .results(3)
        .build();
    match api_client.vn_search(&query).await {
        Ok(response) => {
            response.results.iter()
                .for_each(|vn| {
                    println!("{}", vn.title.as_ref().unwrap());
                });
        }
        Err(error) => {
            eprintln!("{:#?}", error);
        }
    }

    // prints the name and rating for the top 3 visual novels on the site
    let query = QueryBuilder::<VnQuery>::new()
        .fields(VnFieldChoices::all())
        .sort(SortField::Rating)
        .results(3)
        .page(1)
        .reverse()
        .build();
    match api_client.vn_search(&query).await {
        Ok(response) => {
            response.results.iter()
                .for_each(|vn| {
                    println!("{}: {}", vn.title.as_ref().unwrap(), vn.rating.unwrap());
                });
        }
        Err(error) => eprintln!("{:#?}", error),
    }

    // using complex filters
    let filters = r#"
        [ "and"
            , [ "or"
                , [ "olang", "!=", "en" ]
                , [ "olang", "!=", "ja" ]
            ]
            , [ "released", ">=", "2020-01-01" ]
        ]
    "#.to_string();
    let query = QueryBuilder::<VnQuery>::new()
        .filters(&filters)
        .results(10)
        .page(1)
        .build();
    match api_client.vn_search(&query).await {
        Ok(response) => {
            println!("{:#?}", response);
        }
        Err(error) => { eprintln!("{:#?}", error); }
    }
}
```

# VNDB

This crate allows for data collection from the [VNDB site](https://vndb.org). VNDB (Visual Novel Database)
stores a plethora of information about Visual Novels, Characters, Producers, Tags, and so on.

# Documentation

The entirety of this crate is based on the new [HTTPS-based API Documentation](https://api.vndb.org/kana#post-character) and aims to simplify the way you collect data from the site. Further documentation 
and use cases for this crate can be found in the ["examples" directory on github](https://github.com/demeil1/vndb-api/tree/main/examples) or in the respective modules of
the parts of the crate you use.

# Requirments
This crate only requires a VNDB API key to use. To get an API key follow the instructions below, or click on this [link](https://vndb.org/u/tokens) (only if you already have an account). [API Key Documentation](https://api.vndb.org/kana#user-authentication).

Obtaining an API Key:
1. Register for a VNDB account (or Login if you already have one)
2. Open the "My Profile" tab and navigate to the "Applications" section
3. Create a new token and use as instructed (see ["examples" directory](https://github.com/demeil1/vndb-api/tree/main/examples))

# Reqursive Queries

**Fields**: This section allows you to select the pieces of information you want to pull from the site about a
particular subject (Visual Novels, Producers, etc.). Unfortunately, due to the recursive nature of the [Visual Novel](https://api.vndb.org/kana#post-vn), [Release](https://api.vndb.org/kana#post-release), and [Character](https://api.vndb.org/kana#post-character) queries, recursive field choices have been limited. And, while the structs in this crate **DO** allow for said recursive field queries, recursive selection of fields is quite impractical and causes VNDB to deny providing a response due to the large size. These limitations only apply to the Visual Novel, Release, and Character queries. You **ARE** still be able to fill all struct fields with the aforementioned queries. Recursive sections (such as related Visual Novels in a Visual Novel query) in the structure **WILL** still have their name and id such that they can be searched later on for extra information.