}
}
-#[derive(Copy, Clone, Debug, Serialize, Deserialize)]
+#[derive(Copy, Clone, Debug, Default, Serialize, Deserialize)]
#[serde(untagged)]
enum StartCondition {
+ #[default]
WhenFull,
AtTime(Timestamp),
}
-
-impl Default for StartCondition {
- fn default() -> Self {
- StartCondition::WhenFull
- }
-}
command: Option<Command>,
}
-#[derive(Subcommand)]
+#[derive(Default, Subcommand)]
enum Command {
/// Serve the website, websocket connections and start a dealer for each game (default)
+ #[default]
All,
/// Serve the website and websocket connections
Server,
},
}
-impl Default for Command {
- fn default() -> Self {
- Command::All
- }
-}
-
#[async_std::main]
async fn main() -> Result<(), tide::Error> {
let args = Args::parse();
loop {
if !first_attempt {
- let signals = Signals::new(&[SIGINT])?;
+ let signals = Signals::new([SIGINT])?;
let signal_handler = handle_signals(signals);
info!("Attemping redis reconnect in {} seconds...", config.redis.connect_timeout_seconds);
let sleep = sleep(Duration::from_secs(config.redis.connect_timeout_seconds));
first_attempt = false;
}
- let signals = Signals::new(&[SIGINT])?;
+ let signals = Signals::new([SIGINT])?;
let signal_handler = handle_signals(signals);
const REGISTER_UPDATE_STREAM_CHANNEL_BUFFER: usize = 128;
let mut listener = ConcurrentListener::new();
for addrs in &config.server.bind {
if let (Some(cert), Some(key)) = (&config.server.cert, &config.server.key) {
- listener.add(TlsListener::build().addrs(addrs).cert(&cert).key(&key))?;
+ listener.add(TlsListener::build().addrs(addrs).cert(cert).key(key))?;
} else {
listener.add(addrs.to_listener()?)?;
}
}
pub fn player_set(&self) -> HashSet<Username> {
- self.players.iter().map(|(_, player)| *player).collect()
+ self.players.values().copied().collect()
}
pub fn seat_is_available(&self, seat: u32) -> bool {
pub async fn create_game(&mut self, settings: GameSettings) -> RedisResult<i64> {
let now = self.now().await?;
let id = self.redis.incr("game:next_id", 1).await?;
- let () = self.redis.set(game_settings_key(id), AsJson(settings)).await?;
+ self.redis.set(game_settings_key(id), AsJson(settings)).await?;
let GameStatus { created, completed, players, winner } = GameStatus::new(now);
let status_key = game_status_key(id);
- let () = self.redis.hset(&status_key, "created", AsJson(created)).await?;
- let () = self.redis.hset(&status_key, "completed", AsJson(completed)).await?;
- let () = self.redis.hset(&status_key, "players", AsJson(players)).await?;
- let () = self.redis.hset(&status_key, "winner", AsJson(winner)).await?;
- let () = self.redis.set(game_seed_key(id), AsJson(Seed::cha_cha_20_from_entropy())).await?;
- let () = self.redis.rpush("game:list", id).await?;
+ self.redis.hset(&status_key, "created", AsJson(created)).await?;
+ self.redis.hset(&status_key, "completed", AsJson(completed)).await?;
+ self.redis.hset(&status_key, "players", AsJson(players)).await?;
+ self.redis.hset(&status_key, "winner", AsJson(winner)).await?;
+ self.redis.set(game_seed_key(id), AsJson(Seed::cha_cha_20_from_entropy())).await?;
+ self.redis.rpush("game:list", id).await?;
Ok(id)
}