Skip to main content

games/solitaire/
cards.rs

1/// Solitaire card
2#[repr(C)]
3#[derive(
4    Copy, Clone, Debug, PartialEq, Eq, serde::Serialize, serde::Deserialize, Ord, PartialOrd, Hash,
5)]
6pub struct SolitaireCard {
7    pub(crate) card: crate::cards::StandardCard,
8    pub(crate) face_down: bool,
9}
10
11impl From<SolitaireCard> for crate::cards::StandardCard {
12    fn from(val: SolitaireCard) -> Self {
13        val.card
14    }
15}
16
17impl From<crate::cards::StandardCard> for SolitaireCard {
18    fn from(val: crate::cards::StandardCard) -> Self {
19        SolitaireCard {
20            card: val,
21            face_down: true,
22        }
23    }
24}
25
26impl SolitaireCard {
27    /// Create a new solitaire card face down
28    pub const fn new_down(card: crate::cards::StandardCard) -> Self {
29        Self {
30            card,
31            face_down: true,
32        }
33    }
34    /// Create a new solitaire card face up
35    pub const fn new_up(card: crate::cards::StandardCard) -> Self {
36        Self {
37            card,
38            face_down: false,
39        }
40    }
41    /// Flip the card over
42    pub fn flip(&mut self) {
43        self.face_down = !self.face_down;
44    }
45    /// Returns if the card is face down or not
46    pub const fn is_facedown(self) -> bool {
47        self.face_down
48    }
49    /// Returns if the card is face up or not
50    pub const fn is_faceup(self) -> bool {
51        !self.face_down
52    }
53    /// Return the card
54    pub const fn card(self) -> crate::cards::StandardCard {
55        self.card
56    }
57}