tf2_enum/
class.rs

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