use std::fmt::Display; use serde::{Deserialize, Serialize}; #[derive(Clone, Copy, Serialize, Deserialize)] pub enum CardSuit { Spades, Clubs, Hearts, Diamonds, } impl CardSuit { pub fn is_red(&self) -> bool { matches!(self, CardSuit::Hearts | CardSuit::Diamonds) } pub fn is_black(&self) -> bool { !self.is_red() } } impl Display for CardSuit { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { let icon = match self { CardSuit::Clubs => "♣️", CardSuit::Diamonds => "♦️", CardSuit::Hearts => "♥️", CardSuit::Spades => "♠️", }; f.write_str(icon)?; Ok(()) } } #[cfg(test)] mod tests { use super::*; #[test] fn color() { assert!(CardSuit::Hearts.is_red()); assert!(CardSuit::Diamonds.is_red()); assert!(CardSuit::Clubs.is_black()); assert!(CardSuit::Spades.is_black()); } }