1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
use serde::{Deserialize, Serialize}; use wasm_bindgen::prelude::*; #[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)] #[serde(rename_all = "lowercase")] pub enum Colour { Red, Black, } #[wasm_bindgen] #[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] #[serde(rename_all = "lowercase")] pub enum Suit { Clubs, Hearts, Diamonds, Spades, } impl Suit { pub fn colour(self) -> Colour { match self { Suit::Clubs | Suit::Spades => Colour::Black, Suit::Hearts | Suit::Diamonds => Colour::Red, } } } #[wasm_bindgen] #[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] #[serde(rename_all = "lowercase")] pub enum Rank { Three, Four, Five, Six, Seven, Eight, Nine, Ten, Jack, Queen, King, Ace, Two, } pub fn get_suit_array() -> [Suit; 4] { [Suit::Clubs, Suit::Hearts, Suit::Diamonds, Suit::Spades] } pub fn get_rank_array() -> [Rank; 13] { [ Rank::Three, Rank::Four, Rank::Five, Rank::Six, Rank::Seven, Rank::Eight, Rank::Nine, Rank::Ten, Rank::Jack, Rank::Queen, Rank::King, Rank::Ace, Rank::Two, ] } #[cfg(test)] mod tests { use super::*; #[test] fn colour_can_be_derived_from_suit() { assert_eq!(Suit::Clubs.colour(), Colour::Black); assert_eq!(Suit::Hearts.colour(), Colour::Red); assert_eq!(Suit::Diamonds.colour(), Colour::Red); assert_eq!(Suit::Spades.colour(), Colour::Black); } }