1use chrono::{DateTime, Utc};
2use serde::{Deserialize, Serialize};
3use serde_json::Value;
4
5use super::common::{JsonObject, millis};
6
7#[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}