deck.rs
1 mod card; // Declare the `card` module (located at src/deck/card.rs) 2 pub use crate::enums::{cards::CardValue, suits::Suit}; // Import from the top-level `enums` module 3 4 pub use self::card::Card; // Re-export `Card` from the `card` module 5 6 #[derive(Debug, PartialEq)] 7 pub enum DeckError { 8 CardNotFound, 9 } 10 11 pub struct Deck { 12 pub cards: Vec<Card>, 13 } 14 15 impl Deck { 16 pub fn new() -> Self { 17 let mut cards = Vec::with_capacity(52); 18 19 for suit in Suit::all() { 20 for value in CardValue::all() { 21 cards.push(Card { 22 suit, 23 value, 24 }); 25 } 26 } 27 28 Deck { cards } 29 } 30 fn remove_at(&mut self, index: usize) -> Result<Card, DeckError> { 31 if index >= self.cards.len() { 32 Err(DeckError::CardNotFound) 33 } else { 34 Ok(self.cards.remove(index)) 35 } 36 } 37 pub fn take_top(&mut self) -> Result<Card, DeckError> { 38 self.remove_at(0) 39 } 40 }