rs-pixel 0.1.0

A complete, rate-limiting, asynchronous Rust implementation of the Hypixel Public API with extensive SkyBlock support
Documentation
# rs-pixel   [![Build Status]][actions] [![Latest Version]][crates.io] [![Discord]][discord link]

[actions]: https://github.com/kr45732/rs-pixel/actions?query=branch%3Amain
[Build Status]: https://img.shields.io/github/workflow/status/kr45732/rs-pixel/Rust/main
[Latest Version]: https://img.shields.io/crates/v/rs-pixel.svg
[crates.io]: https://crates.io/crates/rs-pixel
[Discord]: https://img.shields.io/discord/796790757947867156?color=4166f5&label=discord&style=flat-square
[discord link]: https://dsc.gg/skyblock-plus

A complete, rate-limiting, asynchronous Rust implementation of the Hypixel Public API with extensive SkyBlock support.

```toml
[dependencies]
rs-pixel = "0.1.0"
```

# Getting started
You will need a Hypixel Api Key to access most endpoints ([official documentation](https://api.hypixel.net/)).

## Creating an Instance
Use the default configuration
```rust
let mut api = RsPixel::new("API KEY").await.unwrap();
```
Or configure the client, Minecraft username/UUID API type, and the rate limit strategy
```rust
let config = ConfigBuilder::default()
    .client(surf::Config::new().try_into().unwrap())
    .minecraft_api_type(ApiType::PlayerDb)
    .rate_limit_strategy(RateLimitStrategy::Error)
    .into();
let mut api = RsPixel::from_config("API KEY", config).await.unwrap();
```

## Examples
Print a player's name and rank
```rust
let response = api.get_player_by_username("USERNAME").await.unwrap();

println!(
    "{} has the {} rank",
    response.get_name().unwrap(),
    response.get_rank()
);
```

Print a skyblock player's statistics
```rust
let response = api.get_skyblock_profiles_by_name("USERNAME").await.unwrap();
let profile = response.get_last_played_profile().unwrap();

println!(
    "Enderman Slayer XP: {}\nCombat Skill Level: {}\nCatacombs LeveL: {}",
    profile.get_slayer("enderman").unwrap().current_exp,
    profile.get_skill("combat").unwrap().level,
    profile.get_catacombs().unwrap().level
);
```

Print a skyblock player's inventory contents (NBT parsed to JSON)
```rust
let response = api.get_skyblock_profiles_by_uuid("uuid").await.unwrap();
let profile = response.get_last_played_profile().unwrap();

println!("Inventory Contents:  {}", profile.get_inventory().unwrap());
```

Get the first page and print the first auction
```rust
let response = api.get_skyblock_auctions(0).await.unwrap();
let auction = response.auctions.get(0).unwrap();

println!(
    "The starting bid for a {} is {} coins",
    auction.item_name, auction.starting_bid
);
```

# Todo
- Documentation
- More examples

# License & Contributing
Licensed under either of [Apache License, Version 2.0](LICENSE-APACHE) or [MIT license](LICENSE-MIT) at your option.

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this crate by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.