Skip to main content

hypixel/models/
player.rs

1use chrono::{DateTime, Utc};
2use serde::{Deserialize, Serialize};
3use serde_json::Value;
4
5use super::common::{JsonObject, millis};
6
7/// A player's network profile, as returned by `player`.
8///
9/// Hypixel exposes a large and frequently changing set of fields here; the
10/// stable, documented ones are typed and everything else is preserved in
11/// [`extra`](Self::extra).
12#[derive(Debug, Clone, Deserialize, Serialize)]
13pub struct Player {
14    #[serde(default)]
15    pub uuid: String,
16    #[serde(default)]
17    pub displayname: Option<String>,
18    #[serde(rename = "rank", default)]
19    pub rank: Option<String>,
20    #[serde(rename = "newPackageRank", default)]
21    pub package_rank: Option<String>,
22    #[serde(rename = "monthlyPackageRank", default)]
23    pub monthly_package_rank: Option<String>,
24    #[serde(rename = "rankPlusColor", default)]
25    pub rank_plus_color: Option<String>,
26    #[serde(rename = "firstLogin", default, with = "millis::option")]
27    pub first_login: Option<DateTime<Utc>>,
28    #[serde(rename = "lastLogin", default, with = "millis::option")]
29    pub last_login: Option<DateTime<Utc>>,
30    #[serde(rename = "lastLogout", default, with = "millis::option")]
31    pub last_logout: Option<DateTime<Utc>>,
32    #[serde(default)]
33    pub karma: Option<i64>,
34    #[serde(rename = "networkExp", default)]
35    pub network_exp: Option<f64>,
36    #[serde(rename = "achievementPoints", default)]
37    pub achievement_points: Option<i64>,
38    #[serde(default)]
39    pub stats: Option<Value>,
40    #[serde(flatten)]
41    pub extra: JsonObject,
42}
43
44#[derive(Debug, Clone, Deserialize)]
45pub(crate) struct PlayerResponse {
46    pub player: Option<Player>,
47}