#[repr(C)]
#[derive(
Copy, Clone, Debug, PartialEq, Eq, serde::Serialize, serde::Deserialize, Ord, PartialOrd, Hash,
)]
pub struct SolitaireCard {
pub(crate) card: crate::cards::StandardCard,
pub(crate) face_down: bool,
}
impl From<SolitaireCard> for crate::cards::StandardCard {
fn from(val: SolitaireCard) -> Self {
val.card
}
}
impl From<crate::cards::StandardCard> for SolitaireCard {
fn from(val: crate::cards::StandardCard) -> Self {
SolitaireCard {
card: val,
face_down: true,
}
}
}
impl SolitaireCard {
pub const fn new_down(card: crate::cards::StandardCard) -> Self {
Self {
card,
face_down: true,
}
}
pub const fn new_up(card: crate::cards::StandardCard) -> Self {
Self {
card,
face_down: false,
}
}
pub fn flip(&mut self) {
self.face_down = !self.face_down;
}
pub const fn is_facedown(self) -> bool {
self.face_down
}
pub const fn is_faceup(self) -> bool {
!self.face_down
}
pub const fn card(self) -> crate::cards::StandardCard {
self.card
}
}