dota/components/
team.rs

1use std::fmt;
2
3use serde::{Deserialize, Serialize};
4
5#[derive(Serialize, Deserialize, Debug, Hash, Eq, PartialEq)]
6#[serde(from = "String")]
7pub enum Team {
8    Radiant,
9    Dire,
10    None,
11    Undefined(String),
12}
13
14impl From<String> for Team {
15    fn from(s: String) -> Self {
16        match s.as_str() {
17            "radiant" | "team2" => Team::Radiant,
18            "dire" | "team3" => Team::Dire,
19            "none" => Team::None,
20            _ => Team::Undefined(s),
21        }
22    }
23}
24
25impl fmt::Display for Team {
26    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
27        match self {
28            Team::Radiant => write!(f, "Radiant"),
29            Team::Dire => write!(f, "Dire"),
30            Team::None => write!(f, "None"),
31            Team::Undefined(s) => write!(f, "Undefined: {}", s),
32        }
33    }
34}
35
36#[cfg(test)]
37mod tests {
38    use super::*;
39
40    #[test]
41    fn test_team_from_str() {
42        assert!(matches!(Team::from("radiant".to_string()), Team::Radiant));
43        assert!(matches!(Team::from("dire".to_string()), Team::Dire));
44    }
45}