tf2_enum/
class.rs

1use crate::StockWeapon;
2use serde::{Deserialize, Serialize};
3use num_enum::{IntoPrimitive, TryFromPrimitive};
4use strum::{Display, EnumCount, EnumIter, EnumString};
5
6/// Class.
7#[derive(
8    Debug,
9    Deserialize,
10    Serialize,
11    Hash,
12    Eq,
13    PartialEq,
14    Ord,
15    PartialOrd,
16    Display,
17    EnumString,
18    EnumIter,
19    EnumCount,
20    TryFromPrimitive,
21    IntoPrimitive,
22    Clone,
23    Copy,
24)]
25#[allow(missing_docs)]
26#[repr(u32)]
27pub enum Class {
28    #[serde(alias = "scout")]
29    Scout = 1,
30    #[serde(alias = "sniper")]
31    Sniper = 2,
32    #[serde(alias = "soldier")]
33    Soldier = 3,
34    #[serde(alias = "demoman")]
35    Demoman = 4,
36    #[serde(alias = "medic")]
37    Medic = 5,
38    #[serde(alias = "heavy")]
39    Heavy = 6,
40    #[serde(alias = "pyro")]
41    Pyro = 7,
42    #[serde(alias = "spy")]
43    Spy = 8,
44    #[serde(alias = "engineer")]
45    Engineer = 9,
46}
47
48impl Class {
49    /// Gets the set of stock weapons available to the class.
50    pub fn stock_weapons(&self) -> &'static [StockWeapon] {
51        StockWeapon::class_stock_weapons(*self)
52    }
53}
54
55#[cfg(test)]
56mod tests {
57    use super::*;
58    
59    #[test]
60    fn serializes() {
61        let json = r#""Scout""#;
62        let serialized = serde_json::to_string(&Class::Scout).unwrap();
63        assert_eq!(serialized, json);
64    }
65
66    #[test]
67    fn deserializes() {
68        let json = r#""Scout""#;
69        let deserialized: Class = serde_json::from_str(json).unwrap();
70        assert_eq!(deserialized, Class::Scout);
71
72        let serialized = serde_json::to_string(&deserialized).unwrap();
73        assert_eq!(serialized, json);
74    }
75}