use super::helpers::{de_num_or_str, de_opt_num_or_str};
use serde::{Deserialize, Serialize};
use std::collections::BTreeMap;
#[derive(Clone, Debug, Default, Deserialize, Serialize, PartialEq)]
pub struct Player {
#[serde(default)]
pub steamid: String,
#[serde(default)]
pub name: String,
#[serde(default)]
pub clan: String,
#[serde(default, deserialize_with = "de_opt_num_or_str")]
pub observer_slot: Option<u8>,
#[serde(default, deserialize_with = "de_opt_num_or_str")]
pub xp_overload_level: Option<u32>,
#[serde(default)]
pub team: PlayerTeam,
#[serde(default)]
pub activity: PlayerActivity,
#[serde(default)]
pub state: PlayerState,
#[serde(default, rename = "match_stats")]
pub match_stats: MatchStats,
#[serde(default)]
pub weapons: BTreeMap<String, Weapon>,
#[serde(default)]
pub spectarget: String,
#[serde(default)]
pub position: String,
#[serde(default)]
pub forward: String,
}
#[derive(Clone, Copy, Debug, Default, Deserialize, Serialize, PartialEq, Eq, Hash)]
pub enum PlayerTeam {
#[serde(alias = "ct", alias = "CT")]
CT,
#[serde(alias = "t", alias = "T")]
T,
#[serde(other)]
#[default]
Unassigned,
}
#[derive(Clone, Copy, Debug, Default, Deserialize, Serialize, PartialEq, Eq, Hash)]
#[serde(rename_all = "lowercase")]
pub enum PlayerActivity {
Menu,
Playing,
Textinput,
#[serde(other)]
#[default]
Unknown,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize, PartialEq)]
pub struct PlayerState {
#[serde(default, deserialize_with = "de_num_or_str")]
pub health: i32,
#[serde(default, deserialize_with = "de_num_or_str")]
pub armor: i32,
#[serde(default)]
pub helmet: bool,
#[serde(default)]
pub defusekit: bool,
#[serde(default, deserialize_with = "de_num_or_str")]
pub flashed: i32,
#[serde(default, deserialize_with = "de_num_or_str")]
pub smoked: i32,
#[serde(default, deserialize_with = "de_num_or_str")]
pub burning: i32,
#[serde(default, deserialize_with = "de_num_or_str")]
pub money: i32,
#[serde(default, deserialize_with = "de_num_or_str")]
pub round_kills: i32,
#[serde(default, deserialize_with = "de_num_or_str")]
pub round_killhs: i32,
#[serde(default, deserialize_with = "de_num_or_str")]
pub round_totaldmg: i32,
#[serde(default, deserialize_with = "de_num_or_str")]
pub equip_value: i32,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize, PartialEq, Eq)]
pub struct MatchStats {
#[serde(default, deserialize_with = "de_num_or_str")]
pub kills: i32,
#[serde(default, deserialize_with = "de_num_or_str")]
pub assists: i32,
#[serde(default, deserialize_with = "de_num_or_str")]
pub deaths: i32,
#[serde(default, deserialize_with = "de_num_or_str")]
pub mvps: i32,
#[serde(default, deserialize_with = "de_num_or_str")]
pub score: i32,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize, PartialEq, Eq)]
pub struct Weapon {
#[serde(default)]
pub name: String,
#[serde(default, deserialize_with = "de_opt_num_or_str")]
pub paintkit: Option<String>,
#[serde(default, rename = "type")]
pub kind: WeaponKind,
#[serde(default, deserialize_with = "de_opt_num_or_str")]
pub ammo_clip: Option<i32>,
#[serde(default, deserialize_with = "de_opt_num_or_str")]
pub ammo_clip_max: Option<i32>,
#[serde(default, deserialize_with = "de_opt_num_or_str")]
pub ammo_reserve: Option<i32>,
#[serde(default)]
pub state: WeaponState,
}
#[derive(Clone, Copy, Debug, Default, Deserialize, Serialize, PartialEq, Eq, Hash)]
pub enum WeaponKind {
#[serde(alias = "Knife")]
Knife,
#[serde(alias = "Pistol")]
Pistol,
#[serde(alias = "Submachine Gun", alias = "SubmachineGun")]
SubmachineGun,
#[serde(alias = "Rifle")]
Rifle,
#[serde(alias = "SniperRifle", alias = "Sniper Rifle")]
SniperRifle,
#[serde(alias = "Shotgun")]
Shotgun,
#[serde(alias = "Machine Gun", alias = "MachineGun")]
MachineGun,
#[serde(alias = "Grenade")]
Grenade,
#[serde(alias = "C4")]
C4,
#[serde(alias = "StackableItem")]
StackableItem,
#[serde(other)]
#[default]
Unknown,
}
#[derive(Clone, Copy, Debug, Default, Deserialize, Serialize, PartialEq, Eq, Hash)]
#[serde(rename_all = "lowercase")]
pub enum WeaponState {
Holstered,
Active,
Reloading,
#[serde(other)]
#[default]
Unknown,
}