hypixel-sdk 0.2.1

Async client for the Hypixel Public API with typed models and SkyBlock helpers
Documentation
use std::collections::HashMap;

use serde::{Deserialize, Serialize};
use serde_json::Value;

use super::common::JsonObject;

/// A network game definition, as returned by `resources/games`.
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct Game {
    #[serde(default)]
    pub id: i32,
    #[serde(default)]
    pub name: String,
    #[serde(rename = "databaseName", default)]
    pub database_name: String,
    #[serde(rename = "modeNames", default)]
    pub mode_names: HashMap<String, String>,
    #[serde(default)]
    pub retired: bool,
    #[serde(default)]
    pub legacy: bool,
}

/// The SkyBlock skills resource from `resources/skyblock/skills`.
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct SkillsResource {
    #[serde(default)]
    pub version: String,
    #[serde(default)]
    pub skills: HashMap<String, Skill>,
}

/// A single skill's definition, including its per-level XP table.
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct Skill {
    #[serde(default)]
    pub name: String,
    #[serde(default)]
    pub description: String,
    #[serde(rename = "maxLevel", default)]
    pub max_level: i32,
    #[serde(default)]
    pub levels: Vec<SkillLevel>,
}

/// One tier within a [`Skill`]'s level table.
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct SkillLevel {
    #[serde(default)]
    pub level: i32,
    #[serde(rename = "totalExpRequired", default)]
    pub total_exp_required: f64,
    #[serde(default)]
    pub unlocks: Vec<String>,
}

/// A SkyBlock item definition from `resources/skyblock/items`.
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct SkyBlockItem {
    #[serde(default)]
    pub id: String,
    #[serde(default)]
    pub material: Option<String>,
    #[serde(default)]
    pub name: Option<String>,
    #[serde(default)]
    pub tier: Option<String>,
    #[serde(default)]
    pub npc_sell_price: Option<f64>,
    #[serde(default)]
    pub category: Option<String>,
    #[serde(flatten)]
    pub extra: JsonObject,
}

/// The SkyBlock collections resource from `resources/skyblock/collections`.
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct CollectionsResource {
    #[serde(default)]
    pub version: String,
    #[serde(default)]
    pub collections: HashMap<String, Value>,
}

/// An active resource pack from `resources/packs`.
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct ResourcePack {
    #[serde(default)]
    pub id: String,
    #[serde(rename = "deployId", default)]
    pub deploy_id: String,
    #[serde(rename = "lastUpdated", default)]
    pub last_updated: i64,
    #[serde(default)]
    pub versions: Vec<ResourcePackVersion>,
    #[serde(flatten)]
    pub extra: JsonObject,
}

/// One built version of a [`ResourcePack`].
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct ResourcePackVersion {
    #[serde(rename = "packFormat", default)]
    pub pack_format: i32,
    #[serde(default)]
    pub hash: String,
    #[serde(default)]
    pub url: String,
    #[serde(flatten)]
    pub extra: JsonObject,
}

/// The current SkyBlock mayor and election state from `resources/skyblock/election`.
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct ElectionResource {
    #[serde(default)]
    pub mayor: Option<Value>,
    #[serde(default)]
    pub current: Option<Value>,
}

#[derive(Debug, Clone, Deserialize)]
pub(crate) struct GamesResponse {
    #[serde(default)]
    pub games: HashMap<String, Game>,
}

#[derive(Debug, Clone, Deserialize)]
pub(crate) struct ItemsResponse {
    #[serde(default)]
    pub items: Vec<SkyBlockItem>,
}

#[derive(Debug, Clone, Deserialize)]
pub(crate) struct PacksResponse {
    #[serde(default)]
    pub packs: Vec<ResourcePack>,
}