genius_invokation/cards/action/support/
companion.rs1use 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);