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