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