genius_invokation/cards/action/support/
companion.rs

1use crate::CardCost;
2
3use super::Price;
4
5#[derive(Debug, Hash, Clone, Copy, PartialEq, Eq)]
6#[non_exhaustive]
7pub enum CompanionCard {
8    Paimon,
9    Katheryne,
10    Timaeus,
11    Wagner,
12    ChefMao,
13    Tubby,
14    Timmie,
15    Liben,
16    Ellin,
17    LiuSu,
18    ChangTheNinth,
19    IronTongueTian,
20}
21
22impl super::PlayingCard for CompanionCard {
23    fn name(&self) -> &'static str {
24        self.info_dump().0
25    }
26
27    fn shop_price(&self) -> Option<Price> {
28        self.info_dump().1
29    }
30
31    fn cost(&self) -> CardCost {
32        self.info_dump().2
33    }
34
35    fn companion(&self) -> Option<CompanionCard> {
36        Some(*self)
37    }
38}
39
40impl CompanionCard {
41    fn info_dump(&self) -> (&'static str, Option<Price>, CardCost) {
42        match self {
43            Self::Paimon =>    ("Paimon",    None,      CardCost::MATCH3),
44            Self::Katheryne => ("Katheryne", Some(700), CardCost::ANY2),
45            Self::Timaeus =>   ("Timaeus",   Some(700), CardCost::MATCH2),
46            Self::Wagner =>    ("Wagner",    Some(700), CardCost::MATCH2),
47            Self::ChefMao =>   ("Chef Mao",  Some(700), CardCost::ONE),
48            Self::Tubby =>     ("Tubby",     Some(700), CardCost::MATCH2),
49            Self::Timmie =>    ("Timmie",    Some(700), CardCost::ZERO),
50            Self::Liben =>     ("Liben",     Some(700), CardCost::ZERO),
51            Self::Ellin =>     ("Ellin",     Some(700), CardCost::MATCH2),
52            Self::LiuSu =>     ("Liu Su",    Some(700), CardCost::ONE),
53            Self::ChangTheNinth =>  ("Chang the Ninth",  Some(700), CardCost::ZERO),
54            Self::IronTongueTian => ("Iron Tongue Tian", Some(700), CardCost::ANY2),
55        }
56    }
57}
58
59impl super::CardOrd for CompanionCard {
60    fn cmp(&self, other: &Self) -> std::cmp::Ordering {
61        (*self as u32).cmp(&(*other as u32))
62    }
63}
64
65impl_from!(Companion: CompanionCard => crate::SupportCard => crate::ActionCard => crate::Card);