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}