# ddragon [![latest version](https://img.shields.io/crates/v/ddragon?style=flat-square)](https://crates.io/crates/ddragon) [![health check status](https://img.shields.io/github/actions/workflow/status/kade-robertson/ddragon/health.yml?label=health&style=flat-square)](https://github.com/kade-robertson/ddragon/actions/workflows/health.yml) [![downloads of latest version](https://img.shields.io/crates/d/ddragon?style=flat-square)](https://crates.io/crates/ddragon) [![latest docs](https://img.shields.io/docsrs/ddragon?style=flat-square)](https://docs.rs/ddragon/latest/ddragon/) Rust library for accessing the latest League of Legends patch's ddragon data. - Fully (de)serializable, well-typed structs - Supports TFT data - Provides a synchronous API by default - Local caching via `cacache` - Accepts custom `ureq` agents (which can use the exposed cache middleware) - Optionally, an asynchronous API can be used that maintains the same featureset - Local caching is handled by `http-cache-reqwest` rather than a custom middleware - Also accepts custom `reqwest` or `reqwest-middleware` clients - Optionally, some useful functions to fetch and decode images, via `image` ## Usage ```rust use ddragon::{cache_middleware::CacheMiddleware, Client, ClientBuilder, ClientError}; fn main() -> Result<(), ClientError> { let client = Client::new("/path/to/your/cache/dir")?; // If you want to use an existing agent let my_agent = ureq::AgentBuilder::new() .middleware(CacheMiddleware::new("/path/to/your/cache/dir")) .build(); let client = ClientBuilder::new().agent(my_agent).build()?; // See available options on the client and in the models folder. let champions = client.champions()?; let runes = client.runes()?; let tft_items = client.tft_items()?; Ok(()) } ``` ## Features The following crate features are available: - `sync` (on by default) enables the synchronous client. - Provides the `ddragon::client` and `ddragon::cache_middleware` module. - Provides the re-exported `ddragon::Client` and `ddragon::ClientBuilder` impls. - Adds `cacache`, `url`, `thiserror`, and `ureq` with the `json` feature enabled as dependencies. - `async` enables the asynchronous client. - Provides the `ddragon::async_client` module. - Provides the re-exported `ddragon::AsyncClient` and `ddragon::AsyncClientBuilder` impls. - Adds `reqwest` with the `json` feature, `reqwest-middleware` and `http-cache-reqwest` as dependencies. - If you would like the client to use `rustls`, use the `async-rustls` feature instead. - `image` enables image fetching and caching. - Both clients will receive `image_of` and `sprite_of` for any model which implements `HasImage`. - Adds the `image` dependency. - To use the library with just the synchronous version, it should be as simple as adding any other dependency: ```toml [dependencies] ddragon = "" ``` - If you would also like to have the image fetching support, use: ```toml [dependencies] ddragon = { version = "", features = ["image"] } ``` - If you want the asynchronous client only, you probably don't want to pull in the dependencies related to the synchronous code, so you can do this: ```toml [dependencies] ddragon = { version = "", default-features = false, features = ["async"] } ``` - If you want the async client and you want to use `rustls` (and you want `ddragon` to generate the client), you can use: ```toml [dependencies] ddragon = { version = "", default-features = false, features = ["async-rustls"] } ``` Note that if you are providing your own client (via `AsyncClientBuilder::new().agent()`) you can use either `async` feature set. - If you only want the DDragon models (none of the client code), you can use ```toml [dependencies] ddragon = { version = "", default-features = false } ``` ### MSRV Currently, this crate support Rust >= 1.67.1.