1use super::helpers::{de_num_or_str, de_opt_num_or_str};
4use serde::{Deserialize, Serialize};
5use std::collections::BTreeMap;
6
7#[derive(Clone, Debug, Default, Deserialize, Serialize, PartialEq)]
9pub struct Player {
10 #[serde(default)]
12 pub steamid: String,
13 #[serde(default)]
15 pub name: String,
16 #[serde(default)]
18 pub clan: String,
19 #[serde(default, deserialize_with = "de_opt_num_or_str")]
21 pub observer_slot: Option<u8>,
22 #[serde(default, deserialize_with = "de_opt_num_or_str")]
24 pub xp_overload_level: Option<u32>,
25 #[serde(default)]
27 pub team: PlayerTeam,
28 #[serde(default)]
30 pub activity: PlayerActivity,
31 #[serde(default)]
33 pub state: PlayerState,
34 #[serde(default, rename = "match_stats")]
36 pub match_stats: MatchStats,
37 #[serde(default)]
39 pub weapons: BTreeMap<String, Weapon>,
40 #[serde(default)]
42 pub spectarget: String,
43 #[serde(default)]
45 pub position: String,
46 #[serde(default)]
48 pub forward: String,
49}
50
51#[derive(Clone, Copy, Debug, Default, Deserialize, Serialize, PartialEq, Eq, Hash)]
53pub enum PlayerTeam {
54 #[serde(alias = "ct", alias = "CT")]
56 CT,
57 #[serde(alias = "t", alias = "T")]
59 T,
60 #[serde(other)]
62 #[default]
63 Unassigned,
64}
65
66#[derive(Clone, Copy, Debug, Default, Deserialize, Serialize, PartialEq, Eq, Hash)]
68#[serde(rename_all = "lowercase")]
69pub enum PlayerActivity {
70 Menu,
72 Playing,
74 Textinput,
76 #[serde(other)]
78 #[default]
79 Unknown,
80}
81
82#[derive(Clone, Debug, Default, Deserialize, Serialize, PartialEq)]
84pub struct PlayerState {
85 #[serde(default, deserialize_with = "de_num_or_str")]
87 pub health: i32,
88 #[serde(default, deserialize_with = "de_num_or_str")]
90 pub armor: i32,
91 #[serde(default)]
93 pub helmet: bool,
94 #[serde(default)]
96 pub defusekit: bool,
97 #[serde(default, deserialize_with = "de_num_or_str")]
99 pub flashed: i32,
100 #[serde(default, deserialize_with = "de_num_or_str")]
102 pub smoked: i32,
103 #[serde(default, deserialize_with = "de_num_or_str")]
105 pub burning: i32,
106 #[serde(default, deserialize_with = "de_num_or_str")]
108 pub money: i32,
109 #[serde(default, deserialize_with = "de_num_or_str")]
111 pub round_kills: i32,
112 #[serde(default, deserialize_with = "de_num_or_str")]
114 pub round_killhs: i32,
115 #[serde(default, deserialize_with = "de_num_or_str")]
117 pub round_totaldmg: i32,
118 #[serde(default, deserialize_with = "de_num_or_str")]
120 pub equip_value: i32,
121}
122
123#[derive(Clone, Debug, Default, Deserialize, Serialize, PartialEq, Eq)]
125pub struct MatchStats {
126 #[serde(default, deserialize_with = "de_num_or_str")]
128 pub kills: i32,
129 #[serde(default, deserialize_with = "de_num_or_str")]
131 pub assists: i32,
132 #[serde(default, deserialize_with = "de_num_or_str")]
134 pub deaths: i32,
135 #[serde(default, deserialize_with = "de_num_or_str")]
137 pub mvps: i32,
138 #[serde(default, deserialize_with = "de_num_or_str")]
140 pub score: i32,
141}
142
143#[derive(Clone, Debug, Default, Deserialize, Serialize, PartialEq, Eq)]
145pub struct Weapon {
146 #[serde(default)]
148 pub name: String,
149 #[serde(default, deserialize_with = "de_opt_num_or_str")]
151 pub paintkit: Option<String>,
152 #[serde(default, rename = "type")]
154 pub kind: WeaponKind,
155 #[serde(default, deserialize_with = "de_opt_num_or_str")]
157 pub ammo_clip: Option<i32>,
158 #[serde(default, deserialize_with = "de_opt_num_or_str")]
160 pub ammo_clip_max: Option<i32>,
161 #[serde(default, deserialize_with = "de_opt_num_or_str")]
163 pub ammo_reserve: Option<i32>,
164 #[serde(default)]
166 pub state: WeaponState,
167}
168
169#[derive(Clone, Copy, Debug, Default, Deserialize, Serialize, PartialEq, Eq, Hash)]
171pub enum WeaponKind {
172 #[serde(alias = "Knife")]
174 Knife,
175 #[serde(alias = "Pistol")]
177 Pistol,
178 #[serde(alias = "Submachine Gun", alias = "SubmachineGun")]
180 SubmachineGun,
181 #[serde(alias = "Rifle")]
183 Rifle,
184 #[serde(alias = "SniperRifle", alias = "Sniper Rifle")]
186 SniperRifle,
187 #[serde(alias = "Shotgun")]
189 Shotgun,
190 #[serde(alias = "Machine Gun", alias = "MachineGun")]
192 MachineGun,
193 #[serde(alias = "Grenade")]
195 Grenade,
196 #[serde(alias = "C4")]
198 C4,
199 #[serde(alias = "StackableItem")]
201 StackableItem,
202 #[serde(other)]
204 #[default]
205 Unknown,
206}
207
208#[derive(Clone, Copy, Debug, Default, Deserialize, Serialize, PartialEq, Eq, Hash)]
210#[serde(rename_all = "lowercase")]
211pub enum WeaponState {
212 Holstered,
214 Active,
216 Reloading,
218 #[serde(other)]
220 #[default]
221 Unknown,
222}