1#[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 pub const fn new_down(card: crate::cards::StandardCard) -> Self {
29 Self {
30 card,
31 face_down: true,
32 }
33 }
34 pub const fn new_up(card: crate::cards::StandardCard) -> Self {
36 Self {
37 card,
38 face_down: false,
39 }
40 }
41 pub fn flip(&mut self) {
43 self.face_down = !self.face_down;
44 }
45 pub const fn is_facedown(self) -> bool {
47 self.face_down
48 }
49 pub const fn is_faceup(self) -> bool {
51 !self.face_down
52 }
53 pub const fn card(self) -> crate::cards::StandardCard {
55 self.card
56 }
57}