use serde::{Deserialize, Serialize};
use uuid::Uuid;
use crate::{
endpoints::{nations::NationRankKind, towns::TownRankKind},
model::{
named_uuid::{NamedUuid, NamedUuidOpt},
permission::TownyPermissions,
timestamp::Timestamp,
},
};
#[derive(Clone, Deserialize, Serialize, PartialEq, Debug)]
#[serde(rename_all = "camelCase")]
pub struct Player {
pub name: String,
pub uuid: Uuid,
pub title: Option<String>,
pub surname: Option<String>,
pub formatted_name: String,
pub about: Option<String>,
pub town: NamedUuidOpt,
pub nation: NamedUuidOpt,
pub timestamps: PlayerTimestamps,
pub status: PlayerStatus,
pub stats: PlayerStats,
pub perms: TownyPermissions,
pub ranks: PlayerRanks,
pub friends: Vec<NamedUuid>,
}
#[derive(Clone, Deserialize, Serialize, PartialEq, Debug)]
#[serde(rename_all = "camelCase")]
pub struct PlayerTimestamps {
#[cfg_attr(
feature = "chrono",
serde(with = "crate::model::timestamp::seconds")
)]
pub registered: Timestamp,
#[cfg_attr(
feature = "chrono",
serde(with = "crate::model::timestamp::optional_seconds")
)]
pub joined_town_at: Option<Timestamp>,
#[cfg_attr(
feature = "chrono",
serde(with = "crate::model::timestamp::optional_seconds")
)]
pub last_online: Option<Timestamp>,
}
#[derive(Clone, Deserialize, Serialize, PartialEq, Debug)]
#[serde(rename_all = "camelCase")]
pub struct PlayerStatus {
pub is_online: bool,
#[serde(rename = "isNPC")]
pub is_npc: bool,
pub is_mayor: bool,
pub is_king: bool,
pub has_town: bool,
pub has_nation: bool,
}
#[derive(Clone, Deserialize, Serialize, PartialEq, Debug)]
#[serde(rename_all = "camelCase")]
pub struct PlayerStats {
pub balance: f64,
pub num_friends: i32,
}
#[derive(Clone, Deserialize, Serialize, PartialEq, Debug)]
#[serde(rename_all = "camelCase")]
pub struct PlayerRanks {
pub town_ranks: Vec<TownRankKind>,
pub nation_ranks: Vec<NationRankKind>,
}