csgo_gsi_payload/
weapon.rs

1use serde::Deserialize;
2
3#[derive(Deserialize, Debug, Clone)]
4pub enum WeaponType {
5    Knife,
6    Pistol,
7    Rifle,
8    SniperRifle,
9    #[serde(rename = "Submachine Gun")]
10    SubmachineGun,
11    #[serde(rename = "Machine Gun")]
12    MachineGun,
13    Shotgun,
14    Grenade,
15    C4,
16
17    // Danger Zone only
18    Fists,
19    Melee,
20    Tablet,
21    #[serde(rename = "Breach Charge")]
22    BreachCharge,
23    #[serde(rename = "Bump Mine")]
24    BumpMine,
25
26    Unknown, // Zeus doesn't have any type
27}
28
29impl Default for WeaponType {
30    fn default() -> Self {
31        Self::Unknown
32    }
33}
34
35#[derive(Deserialize, Debug, Clone)]
36#[serde(rename_all = "lowercase")]
37pub enum WeaponState {
38    Holstered,
39    Active,
40    Reloading,
41}
42
43#[derive(Deserialize, Debug, Clone)]
44pub struct Weapon {
45    /// Weapon name.
46    pub name: String,
47    /// Weapon skin name.
48    #[serde(rename = "paintkit")]
49    pub paint_kit: String,
50    /// Weapon type. See [`WeaponType`].
51    #[serde(default)]
52    pub r#type: WeaponType, // `type` is a reserved keyword
53    /// Weapon type. See [`WeaponState`].
54    pub state: WeaponState,
55    pub ammo_clip: Option<u16>,
56    pub ammo_clip_max: Option<u16>,
57    pub ammo_reserve: Option<u16>,
58}