}
}
-pub const TWO_OF_CLUBS: Card = Card { rank: Two, suit: Clubs };
-pub const THREE_OF_CLUBS: Card = Card { rank: Three, suit: Clubs };
-pub const FOUR_OF_CLUBS: Card = Card { rank: Four, suit: Clubs };
-pub const FIVE_OF_CLUBS: Card = Card { rank: Five, suit: Clubs };
-pub const SIX_OF_CLUBS: Card = Card { rank: Six, suit: Clubs };
-pub const SEVEN_OF_CLUBS: Card = Card { rank: Seven, suit: Clubs };
-pub const EIGHT_OF_CLUBS: Card = Card { rank: Eight, suit: Clubs };
-pub const NINE_OF_CLUBS: Card = Card { rank: Nine, suit: Clubs };
-pub const TEN_OF_CLUBS: Card = Card { rank: Ten, suit: Clubs };
-pub const JACK_OF_CLUBS: Card = Card { rank: Jack, suit: Clubs };
-pub const QUEEN_OF_CLUBS: Card = Card { rank: Queen, suit: Clubs };
-pub const KING_OF_CLUBS: Card = Card { rank: King, suit: Clubs };
-pub const ACE_OF_CLUBS: Card = Card { rank: Ace, suit: Clubs };
-
-pub const TWO_OF_DIAMONDS: Card = Card { rank: Two, suit: Diamonds };
-pub const THREE_OF_DIAMONDS: Card = Card { rank: Three, suit: Diamonds };
-pub const FOUR_OF_DIAMONDS: Card = Card { rank: Four, suit: Diamonds };
-pub const FIVE_OF_DIAMONDS: Card = Card { rank: Five, suit: Diamonds };
-pub const SIX_OF_DIAMONDS: Card = Card { rank: Six, suit: Diamonds };
-pub const SEVEN_OF_DIAMONDS: Card = Card { rank: Seven, suit: Diamonds };
-pub const EIGHT_OF_DIAMONDS: Card = Card { rank: Eight, suit: Diamonds };
-pub const NINE_OF_DIAMONDS: Card = Card { rank: Nine, suit: Diamonds };
-pub const TEN_OF_DIAMONDS: Card = Card { rank: Ten, suit: Diamonds };
-pub const JACK_OF_DIAMONDS: Card = Card { rank: Jack, suit: Diamonds };
-pub const QUEEN_OF_DIAMONDS: Card = Card { rank: Queen, suit: Diamonds };
-pub const KING_OF_DIAMONDS: Card = Card { rank: King, suit: Diamonds };
-pub const ACE_OF_DIAMONDS: Card = Card { rank: Ace, suit: Diamonds };
-
-pub const TWO_OF_HEARTS: Card = Card { rank: Two, suit: Hearts };
-pub const THREE_OF_HEARTS: Card = Card { rank: Three, suit: Hearts };
-pub const FOUR_OF_HEARTS: Card = Card { rank: Four, suit: Hearts };
-pub const FIVE_OF_HEARTS: Card = Card { rank: Five, suit: Hearts };
-pub const SIX_OF_HEARTS: Card = Card { rank: Six, suit: Hearts };
-pub const SEVEN_OF_HEARTS: Card = Card { rank: Seven, suit: Hearts };
-pub const EIGHT_OF_HEARTS: Card = Card { rank: Eight, suit: Hearts };
-pub const NINE_OF_HEARTS: Card = Card { rank: Nine, suit: Hearts };
-pub const TEN_OF_HEARTS: Card = Card { rank: Ten, suit: Hearts };
-pub const JACK_OF_HEARTS: Card = Card { rank: Jack, suit: Hearts };
-pub const QUEEN_OF_HEARTS: Card = Card { rank: Queen, suit: Hearts };
-pub const KING_OF_HEARTS: Card = Card { rank: King, suit: Hearts };
-pub const ACE_OF_HEARTS: Card = Card { rank: Ace, suit: Hearts };
-
-pub const TWO_OF_SPADES: Card = Card { rank: Two, suit: Spades };
-pub const THREE_OF_SPADES: Card = Card { rank: Three, suit: Spades };
-pub const FOUR_OF_SPADES: Card = Card { rank: Four, suit: Spades };
-pub const FIVE_OF_SPADES: Card = Card { rank: Five, suit: Spades };
-pub const SIX_OF_SPADES: Card = Card { rank: Six, suit: Spades };
-pub const SEVEN_OF_SPADES: Card = Card { rank: Seven, suit: Spades };
-pub const EIGHT_OF_SPADES: Card = Card { rank: Eight, suit: Spades };
-pub const NINE_OF_SPADES: Card = Card { rank: Nine, suit: Spades };
-pub const TEN_OF_SPADES: Card = Card { rank: Ten, suit: Spades };
-pub const JACK_OF_SPADES: Card = Card { rank: Jack, suit: Spades };
-pub const QUEEN_OF_SPADES: Card = Card { rank: Queen, suit: Spades };
-pub const KING_OF_SPADES: Card = Card { rank: King, suit: Spades };
-pub const ACE_OF_SPADES: Card = Card { rank: Ace, suit: Spades };
-
-pub const FIFTY_TWO_CARD_DECK: [Card; 52] = [
- ACE_OF_SPADES,
- ACE_OF_HEARTS,
- ACE_OF_DIAMONDS,
- ACE_OF_CLUBS,
- KING_OF_SPADES,
- KING_OF_HEARTS,
- KING_OF_DIAMONDS,
- KING_OF_CLUBS,
- QUEEN_OF_SPADES,
- QUEEN_OF_HEARTS,
- QUEEN_OF_DIAMONDS,
- QUEEN_OF_CLUBS,
- JACK_OF_SPADES,
- JACK_OF_HEARTS,
- JACK_OF_DIAMONDS,
- JACK_OF_CLUBS,
- TEN_OF_SPADES,
- TEN_OF_HEARTS,
- TEN_OF_DIAMONDS,
- TEN_OF_CLUBS,
- NINE_OF_SPADES,
- NINE_OF_HEARTS,
- NINE_OF_DIAMONDS,
- NINE_OF_CLUBS,
- EIGHT_OF_SPADES,
- EIGHT_OF_HEARTS,
- EIGHT_OF_DIAMONDS,
- EIGHT_OF_CLUBS,
- SEVEN_OF_SPADES,
- SEVEN_OF_HEARTS,
- SEVEN_OF_DIAMONDS,
- SEVEN_OF_CLUBS,
- SIX_OF_SPADES,
- SIX_OF_HEARTS,
- SIX_OF_DIAMONDS,
- SIX_OF_CLUBS,
- FIVE_OF_SPADES,
- FIVE_OF_HEARTS,
- FIVE_OF_DIAMONDS,
- FIVE_OF_CLUBS,
- FOUR_OF_SPADES,
- FOUR_OF_HEARTS,
- FOUR_OF_DIAMONDS,
- FOUR_OF_CLUBS,
- THREE_OF_SPADES,
- THREE_OF_HEARTS,
- THREE_OF_DIAMONDS,
- THREE_OF_CLUBS,
- TWO_OF_SPADES,
- TWO_OF_HEARTS,
- TWO_OF_DIAMONDS,
- TWO_OF_CLUBS,
-];
+#[cfg(test)]
+pub use constants::*;
+
+#[cfg(test)]
+mod constants {
+ use super::*;
+
+ pub const TWO_OF_CLUBS: Card = Card { rank: Two, suit: Clubs };
+ pub const THREE_OF_CLUBS: Card = Card { rank: Three, suit: Clubs };
+ pub const FOUR_OF_CLUBS: Card = Card { rank: Four, suit: Clubs };
+ pub const FIVE_OF_CLUBS: Card = Card { rank: Five, suit: Clubs };
+ pub const SIX_OF_CLUBS: Card = Card { rank: Six, suit: Clubs };
+ pub const SEVEN_OF_CLUBS: Card = Card { rank: Seven, suit: Clubs };
+ pub const EIGHT_OF_CLUBS: Card = Card { rank: Eight, suit: Clubs };
+ pub const NINE_OF_CLUBS: Card = Card { rank: Nine, suit: Clubs };
+ pub const TEN_OF_CLUBS: Card = Card { rank: Ten, suit: Clubs };
+ pub const JACK_OF_CLUBS: Card = Card { rank: Jack, suit: Clubs };
+ pub const QUEEN_OF_CLUBS: Card = Card { rank: Queen, suit: Clubs };
+ pub const KING_OF_CLUBS: Card = Card { rank: King, suit: Clubs };
+ pub const ACE_OF_CLUBS: Card = Card { rank: Ace, suit: Clubs };
+
+ pub const TWO_OF_DIAMONDS: Card = Card { rank: Two, suit: Diamonds };
+ pub const THREE_OF_DIAMONDS: Card = Card { rank: Three, suit: Diamonds };
+ pub const FOUR_OF_DIAMONDS: Card = Card { rank: Four, suit: Diamonds };
+ pub const FIVE_OF_DIAMONDS: Card = Card { rank: Five, suit: Diamonds };
+ pub const SIX_OF_DIAMONDS: Card = Card { rank: Six, suit: Diamonds };
+ pub const SEVEN_OF_DIAMONDS: Card = Card { rank: Seven, suit: Diamonds };
+ pub const EIGHT_OF_DIAMONDS: Card = Card { rank: Eight, suit: Diamonds };
+ pub const NINE_OF_DIAMONDS: Card = Card { rank: Nine, suit: Diamonds };
+ pub const TEN_OF_DIAMONDS: Card = Card { rank: Ten, suit: Diamonds };
+ pub const JACK_OF_DIAMONDS: Card = Card { rank: Jack, suit: Diamonds };
+ pub const QUEEN_OF_DIAMONDS: Card = Card { rank: Queen, suit: Diamonds };
+ pub const KING_OF_DIAMONDS: Card = Card { rank: King, suit: Diamonds };
+ pub const ACE_OF_DIAMONDS: Card = Card { rank: Ace, suit: Diamonds };
+
+ pub const TWO_OF_HEARTS: Card = Card { rank: Two, suit: Hearts };
+ pub const THREE_OF_HEARTS: Card = Card { rank: Three, suit: Hearts };
+ pub const FOUR_OF_HEARTS: Card = Card { rank: Four, suit: Hearts };
+ pub const FIVE_OF_HEARTS: Card = Card { rank: Five, suit: Hearts };
+ pub const SIX_OF_HEARTS: Card = Card { rank: Six, suit: Hearts };
+ pub const SEVEN_OF_HEARTS: Card = Card { rank: Seven, suit: Hearts };
+ pub const EIGHT_OF_HEARTS: Card = Card { rank: Eight, suit: Hearts };
+ pub const NINE_OF_HEARTS: Card = Card { rank: Nine, suit: Hearts };
+ pub const TEN_OF_HEARTS: Card = Card { rank: Ten, suit: Hearts };
+ pub const JACK_OF_HEARTS: Card = Card { rank: Jack, suit: Hearts };
+ pub const QUEEN_OF_HEARTS: Card = Card { rank: Queen, suit: Hearts };
+ pub const KING_OF_HEARTS: Card = Card { rank: King, suit: Hearts };
+ pub const ACE_OF_HEARTS: Card = Card { rank: Ace, suit: Hearts };
+
+ pub const TWO_OF_SPADES: Card = Card { rank: Two, suit: Spades };
+ pub const THREE_OF_SPADES: Card = Card { rank: Three, suit: Spades };
+ pub const FOUR_OF_SPADES: Card = Card { rank: Four, suit: Spades };
+ pub const FIVE_OF_SPADES: Card = Card { rank: Five, suit: Spades };
+ pub const SIX_OF_SPADES: Card = Card { rank: Six, suit: Spades };
+ pub const SEVEN_OF_SPADES: Card = Card { rank: Seven, suit: Spades };
+ pub const EIGHT_OF_SPADES: Card = Card { rank: Eight, suit: Spades };
+ pub const NINE_OF_SPADES: Card = Card { rank: Nine, suit: Spades };
+ pub const TEN_OF_SPADES: Card = Card { rank: Ten, suit: Spades };
+ pub const JACK_OF_SPADES: Card = Card { rank: Jack, suit: Spades };
+ pub const QUEEN_OF_SPADES: Card = Card { rank: Queen, suit: Spades };
+ pub const KING_OF_SPADES: Card = Card { rank: King, suit: Spades };
+ pub const ACE_OF_SPADES: Card = Card { rank: Ace, suit: Spades };
+
+ pub const FIFTY_TWO_CARD_DECK: [Card; 52] = [
+ ACE_OF_SPADES,
+ ACE_OF_HEARTS,
+ ACE_OF_DIAMONDS,
+ ACE_OF_CLUBS,
+ KING_OF_SPADES,
+ KING_OF_HEARTS,
+ KING_OF_DIAMONDS,
+ KING_OF_CLUBS,
+ QUEEN_OF_SPADES,
+ QUEEN_OF_HEARTS,
+ QUEEN_OF_DIAMONDS,
+ QUEEN_OF_CLUBS,
+ JACK_OF_SPADES,
+ JACK_OF_HEARTS,
+ JACK_OF_DIAMONDS,
+ JACK_OF_CLUBS,
+ TEN_OF_SPADES,
+ TEN_OF_HEARTS,
+ TEN_OF_DIAMONDS,
+ TEN_OF_CLUBS,
+ NINE_OF_SPADES,
+ NINE_OF_HEARTS,
+ NINE_OF_DIAMONDS,
+ NINE_OF_CLUBS,
+ EIGHT_OF_SPADES,
+ EIGHT_OF_HEARTS,
+ EIGHT_OF_DIAMONDS,
+ EIGHT_OF_CLUBS,
+ SEVEN_OF_SPADES,
+ SEVEN_OF_HEARTS,
+ SEVEN_OF_DIAMONDS,
+ SEVEN_OF_CLUBS,
+ SIX_OF_SPADES,
+ SIX_OF_HEARTS,
+ SIX_OF_DIAMONDS,
+ SIX_OF_CLUBS,
+ FIVE_OF_SPADES,
+ FIVE_OF_HEARTS,
+ FIVE_OF_DIAMONDS,
+ FIVE_OF_CLUBS,
+ FOUR_OF_SPADES,
+ FOUR_OF_HEARTS,
+ FOUR_OF_DIAMONDS,
+ FOUR_OF_CLUBS,
+ THREE_OF_SPADES,
+ THREE_OF_HEARTS,
+ THREE_OF_DIAMONDS,
+ THREE_OF_CLUBS,
+ TWO_OF_SPADES,
+ TWO_OF_HEARTS,
+ TWO_OF_DIAMONDS,
+ TWO_OF_CLUBS,
+ ];
+}
use super::ValidatedUserAction;
use super::{Game, UserAction};
-#[derive(Debug, Clone)]
-enum ChatroomAction {
- Join,
- Message(String),
- Leave,
-}
-
-#[derive(Debug, Clone)]
-struct ChatroomUserAction {
- timestamp: Timestamp,
- username: Username,
- action: ChatroomAction,
-}
-
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ChatroomSettings {
title: String,
#[derive(Debug, Clone)]
pub struct Chatroom {
id: i64,
- settings: ChatroomSettings,
- messages: Vec<ChatroomUserAction>,
+ message_count: usize,
users: HashSet<Username>,
}
impl Chatroom {
- pub fn new(id: i64, settings: ChatroomSettings) -> Self {
- Chatroom { id, settings, messages: Vec::new(), users: HashSet::new() }
+ pub fn new(id: i64, _: ChatroomSettings) -> Self {
+ Chatroom { id, message_count: 0, users: HashSet::new() }
}
}
}
fn actions_len(&self) -> usize {
- self.messages.len()
+ self.message_count
}
fn validate_action(&self, action: UserAction) -> Result<ValidatedUserAction, ActionError> {
}
}
- fn take_action(&mut self, ValidatedUserAction(UserAction { timestamp, username, action }): ValidatedUserAction) -> Result<(), ActionError> {
+ fn take_action(&mut self, ValidatedUserAction(UserAction { username, action, .. }): ValidatedUserAction) -> Result<(), ActionError> {
match action {
Action::Join { .. } => {
- self.messages.push(ChatroomUserAction { timestamp, username, action: ChatroomAction::Join });
+ self.message_count += 1;
self.users.insert(username);
Ok(())
}
- Action::Message { message } => {
- self.messages.push(ChatroomUserAction { timestamp, username, action: ChatroomAction::Message(message) });
+ Action::Message { .. } => {
+ self.message_count += 1;
Ok(())
}
Action::Leave => {
- self.messages.push(ChatroomUserAction { timestamp, username, action: ChatroomAction::Leave });
+ self.message_count += 1;
self.users.remove(&username);
Ok(())
}