use super::types::{GameMode, RoomId};
use serde::{Deserialize, Serialize};
use std::fmt::Debug;
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct RoomSettings<CustomGameSettings>
where
CustomGameSettings: Clone + Debug,
{
pub name: Option<String>,
pub game_mode: GameMode,
pub max_players: u32,
pub is_private: bool,
pub password_hash: Option<String>, pub custom_game_settings: CustomGameSettings,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct RoomMetadata<CustomGameSettings>
where
CustomGameSettings: Clone + Debug,
{
pub room_id: RoomId,
pub name: String,
pub game_mode: GameMode,
pub current_players: u32,
pub max_players: u32,
pub has_password: bool,
pub max_one_way_ms: Option<u32>,
pub custom_game_settings_summary: CustomGameSettings,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct CreateRoomRequestPayload<CustomGameSettings>
where
CustomGameSettings: Clone + Debug,
{
pub settings: RoomSettings<CustomGameSettings>,
}
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
pub struct RoomFilters {
pub game_mode: Option<GameMode>,
pub exclude_full: Option<bool>, pub exclude_private_if_no_password_known: Option<bool>,
pub playable_at_one_way_ms: Option<u32>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct ListRoomsRequestPayload {
pub filters: Option<RoomFilters>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct JoinRoomRequestPayload {
pub measured_one_way_ms: Option<u32>,
pub room_id: RoomId,
pub password_attempt: Option<String>, }
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct RoomCreatedNoticePayload<CustomGameSettings>
where
CustomGameSettings: Clone + Debug,
{
pub metadata: RoomMetadata<CustomGameSettings>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct RoomListResponsePayload<CustomGameSettings>
where
CustomGameSettings: Clone + Debug,
{
pub rooms: Vec<RoomMetadata<CustomGameSettings>>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct JoinRoomOutcomePayload {
pub room_id: RoomId,
pub success: bool,
pub reason_if_fail: Option<String>,
pub room_session_endpoint: Option<String>,
pub player_game_token: Option<String>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct RoomClosedNoticePayload {
pub room_id: RoomId,
pub reason: Option<String>, }
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct RoomMetadataUpdatedNoticePayload<CustomGameSettings>
where
CustomGameSettings: Clone + Debug,
{
pub updated_metadata: RoomMetadata<CustomGameSettings>,
}