hypixel-sdk 0.2.1

Async client for the Hypixel Public API with typed models and SkyBlock helpers
Documentation
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use serde_json::Value;

use super::common::{JsonObject, millis};

/// A player's network profile, as returned by `player`.
///
/// Hypixel exposes a large and frequently changing set of fields here; the
/// stable, documented ones are typed and everything else is preserved in
/// [`extra`](Self::extra).
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct Player {
    #[serde(default)]
    pub uuid: String,
    #[serde(default)]
    pub displayname: Option<String>,
    #[serde(rename = "rank", default)]
    pub rank: Option<String>,
    #[serde(rename = "newPackageRank", default)]
    pub package_rank: Option<String>,
    #[serde(rename = "monthlyPackageRank", default)]
    pub monthly_package_rank: Option<String>,
    #[serde(rename = "rankPlusColor", default)]
    pub rank_plus_color: Option<String>,
    #[serde(rename = "firstLogin", default, with = "millis::option")]
    pub first_login: Option<DateTime<Utc>>,
    #[serde(rename = "lastLogin", default, with = "millis::option")]
    pub last_login: Option<DateTime<Utc>>,
    #[serde(rename = "lastLogout", default, with = "millis::option")]
    pub last_logout: Option<DateTime<Utc>>,
    #[serde(default)]
    pub karma: Option<i64>,
    #[serde(rename = "networkExp", default)]
    pub network_exp: Option<f64>,
    #[serde(rename = "achievementPoints", default)]
    pub achievement_points: Option<i64>,
    #[serde(default)]
    pub stats: Option<Value>,
    #[serde(flatten)]
    pub extra: JsonObject,
}

#[derive(Debug, Clone, Deserialize)]
pub(crate) struct PlayerResponse {
    pub player: Option<Player>,
}