use super::defaults::{
default_empty_room_timeout, default_enable_reconnection, default_event_buffer_size,
default_heartbeat_throttle_secs, default_inactive_room_timeout, default_max_join_attempts,
default_max_players, default_max_room_creations, default_max_rooms_per_game,
default_ping_timeout, default_rate_limit_time_window, default_reconnection_window,
default_region_id, default_room_cleanup_interval,
};
use serde::{Deserialize, Serialize};
#[derive(Debug, Deserialize, Serialize, Clone)]
pub struct ServerConfig {
#[serde(default = "default_max_players")]
pub default_max_players: u8,
#[serde(default = "default_ping_timeout")]
pub ping_timeout: u64,
#[serde(default = "default_room_cleanup_interval")]
pub room_cleanup_interval: u64,
#[serde(default = "default_max_rooms_per_game")]
pub max_rooms_per_game: usize,
#[serde(default = "default_empty_room_timeout")]
pub empty_room_timeout: u64,
#[serde(default = "default_inactive_room_timeout")]
pub inactive_room_timeout: u64,
#[serde(default = "default_reconnection_window")]
pub reconnection_window: u64,
#[serde(default = "default_event_buffer_size")]
pub event_buffer_size: usize,
#[serde(default = "default_enable_reconnection")]
pub enable_reconnection: bool,
#[serde(
default = "default_heartbeat_throttle_secs",
alias = "heartbeat_db_throttle_secs"
)]
pub heartbeat_throttle_secs: u64,
#[serde(default = "default_region_id")]
pub region_id: String,
#[serde(default)]
pub room_code_prefix: Option<String>,
}
impl Default for ServerConfig {
fn default() -> Self {
Self {
default_max_players: default_max_players(),
ping_timeout: default_ping_timeout(),
room_cleanup_interval: default_room_cleanup_interval(),
max_rooms_per_game: default_max_rooms_per_game(),
empty_room_timeout: default_empty_room_timeout(),
inactive_room_timeout: default_inactive_room_timeout(),
reconnection_window: default_reconnection_window(),
event_buffer_size: default_event_buffer_size(),
enable_reconnection: default_enable_reconnection(),
heartbeat_throttle_secs: default_heartbeat_throttle_secs(),
region_id: default_region_id(),
room_code_prefix: None,
}
}
}
#[derive(Debug, Deserialize, Serialize, Clone)]
pub struct RateLimitConfig {
#[serde(default = "default_max_room_creations")]
pub max_room_creations: u32,
#[serde(default = "default_rate_limit_time_window")]
pub time_window: u64,
#[serde(default = "default_max_join_attempts")]
pub max_join_attempts: u32,
}
impl Default for RateLimitConfig {
fn default() -> Self {
Self {
max_room_creations: default_max_room_creations(),
time_window: default_rate_limit_time_window(),
max_join_attempts: default_max_join_attempts(),
}
}
}