mtg_data/
spell_type.rs

1#[derive(idris_derive::Idris)]
2#[idris(repr = usize)]
3#[derive(serde::Serialize, serde::Deserialize)]
4#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
5#[cfg_attr(feature = "ts_export", derive(ts_rs::TS))]
6pub enum SpellType {
7    Adventure,
8    Arcane,
9    Chorus,
10    Lesson,
11    Omen,
12    Trap,
13}
14
15impl std::str::FromStr for SpellType {
16    type Err = crate::ParsingError;
17    fn from_str(s: &str) -> Result<Self, Self::Err> {
18        match s {
19            "adventure" => Ok(Self::Adventure),
20            "arcane" => Ok(Self::Arcane),
21            "chorus" => Ok(Self::Chorus),
22            "lesson" => Ok(Self::Lesson),
23            "omen" => Ok(Self::Omen),
24            "trap" => Ok(Self::Trap),
25            _ => Err(crate::ParsingError {
26                item: "SpellType",
27                message: "provided source does not match",
28            }),
29        }
30    }
31}
32
33impl SpellType {
34    pub fn as_str(&self) -> &'static str {
35        match self {
36            Self::Adventure => "adventure",
37            Self::Arcane => "arcane",
38            Self::Chorus => "chorus",
39            Self::Lesson => "lesson",
40            Self::Omen => "omen",
41            Self::Trap => "trap",
42        }
43    }
44}
45
46impl std::fmt::Display for SpellType {
47    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
48        write!(f, "{}", self.as_str())
49    }
50}
51
52impl SpellType {
53    pub fn all() -> impl Iterator<Item = Self> {
54        [
55            Self::Adventure,
56            Self::Arcane,
57            Self::Chorus,
58            Self::Lesson,
59            Self::Omen,
60            Self::Trap,
61        ].into_iter()
62    }
63}