pub mod consts; use std::fmt::Display; #[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Debug)] pub struct Card { value: Value, suit: Suit, } impl Card { pub const fn new(value: Value, suit: Suit) -> Self { Self { value, suit } } } impl Display for Card { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(f, "{}{}", self.value, self.suit) } } #[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Debug)] pub enum Suit { Clubs, Diamonds, Hearts, Spades, } impl Display for Suit { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!( f, "{}", match self { Self::Clubs => "♣", Self::Diamonds => "◆", Self::Hearts => "♥", Self::Spades => "♠", } ) } } #[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Debug)] pub enum Value { Ace = 1, Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten, Jack, Queen, King, } impl Display for Value { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!( f, "{}", match self { Self::Ace => "A", Self::Two => "2", Self::Three => "3", Self::Four => "4", Self::Five => "5", Self::Six => "6", Self::Seven => "7", Self::Eight => "8", Self::Nine => "9", Self::Ten => "10", Self::Jack => "J", Self::Queen => "Q", Self::King => "K", } ) } }