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 crate::models::common::JsonObject;

/// The `leveling` section of a member: SkyBlock level experience.
///
/// Each SkyBlock level costs a flat 100 XP, so level = `experience / 100`.
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct MemberLeveling {
    #[serde(default)]
    pub experience: f64,
    #[serde(flatten)]
    pub extra: JsonObject,
}

/// The `player_data` section of a member: skills and unlocks.
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct PlayerData {
    /// Skill experience keyed by `SKILL_MINING`-style names.
    #[serde(default)]
    pub experience: HashMap<String, f64>,
    #[serde(default)]
    pub unlocked_coll_tiers: Vec<String>,
    #[serde(default)]
    pub crafted_generators: Vec<String>,
    #[serde(flatten)]
    pub extra: JsonObject,
}

/// The `currencies` section of a member: purse and essence balances.
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct MemberCurrencies {
    #[serde(default)]
    pub coin_purse: f64,
    #[serde(default)]
    pub motes_purse: f64,
    /// Essence balances keyed by essence type (`WITHER`, `DRAGON`, ...).
    #[serde(default)]
    pub essence: HashMap<String, Essence>,
    #[serde(flatten)]
    pub extra: JsonObject,
}

/// One essence balance within [`MemberCurrencies`].
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct Essence {
    #[serde(default)]
    pub current: f64,
    #[serde(flatten)]
    pub extra: JsonObject,
}

/// The `slayer` section of a member.
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct SlayerData {
    /// Per-boss progress keyed by boss name (`zombie`, `spider`, `wolf`,
    /// `enderman`, `blaze`, `vampire`).
    #[serde(default)]
    pub slayer_bosses: HashMap<String, SlayerBossProgress>,
    #[serde(flatten)]
    pub extra: JsonObject,
}

/// Progress against a single slayer boss.
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct SlayerBossProgress {
    #[serde(default)]
    pub xp: f64,
    /// Claimed level flags such as `level_7` / `level_7_special`.
    #[serde(default)]
    pub claimed_levels: HashMap<String, bool>,
    #[serde(flatten)]
    pub extra: JsonObject,
}

/// The `dungeons` section of a member.
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct Dungeons {
    /// Per-dungeon progress keyed by dungeon type (`catacombs`,
    /// `master_catacombs`).
    #[serde(default)]
    pub dungeon_types: HashMap<String, DungeonProgress>,
    /// Per-class progress keyed by class name (`healer`, `mage`, `berserk`,
    /// `archer`, `tank`).
    #[serde(default)]
    pub player_classes: HashMap<String, DungeonClassProgress>,
    #[serde(default)]
    pub selected_dungeon_class: Option<String>,
    #[serde(default)]
    pub secrets: Option<f64>,
    #[serde(flatten)]
    pub extra: JsonObject,
}

/// Progress within one dungeon type.
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct DungeonProgress {
    #[serde(default)]
    pub experience: f64,
    /// Completions keyed by floor number (`"0"` is the entrance).
    #[serde(default)]
    pub tier_completions: HashMap<String, f64>,
    #[serde(default)]
    pub highest_tier_completed: Option<i64>,
    #[serde(flatten)]
    pub extra: JsonObject,
}

/// Progress for one dungeon class.
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct DungeonClassProgress {
    #[serde(default)]
    pub experience: f64,
    #[serde(flatten)]
    pub extra: JsonObject,
}

/// The `pets_data` section of a member.
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct PetsData {
    #[serde(default)]
    pub pets: Vec<Pet>,
    #[serde(flatten)]
    pub extra: JsonObject,
}

/// A single pet owned by a member.
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct Pet {
    #[serde(default)]
    pub uuid: Option<String>,
    /// Pet type id, e.g. `ENDER_DRAGON`.
    #[serde(rename = "type", default)]
    pub pet_type: String,
    #[serde(default)]
    pub exp: f64,
    /// Rarity tier: `COMMON`, `UNCOMMON`, `RARE`, `EPIC`, `LEGENDARY`, `MYTHIC`.
    #[serde(default)]
    pub tier: String,
    #[serde(default)]
    pub active: bool,
    #[serde(default)]
    pub held_item: Option<String>,
    #[serde(default)]
    pub skin: Option<String>,
    #[serde(default)]
    pub candy_used: i64,
    #[serde(flatten)]
    pub extra: JsonObject,
}

/// The `mining_core` section of a member: Heart of the Mountain progress.
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct MiningCore {
    /// Heart of the Mountain experience.
    #[serde(default)]
    pub experience: f64,
    #[serde(default)]
    pub powder_mithril: f64,
    #[serde(default)]
    pub powder_gemstone: f64,
    #[serde(default)]
    pub powder_glacite: f64,
    /// Unlocked HOTM tree nodes and their levels.
    #[serde(default)]
    pub nodes: HashMap<String, Value>,
    #[serde(flatten)]
    pub extra: JsonObject,
}