1use crate::StockWeapon;
2use serde::{Deserialize, Serialize};
3use num_enum::{IntoPrimitive, TryFromPrimitive};
4use strum::{Display, EnumCount, EnumIter, EnumString};
5
6#[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 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}