//! Network formats and container messages mod action; pub use action::*; mod req; pub use req::*; mod resp; pub use resp::*; mod update; pub use update::*; use crate::{ data::{Color, Player}, map::Map, }; use serde::{Deserialize, Serialize}; /// An alias for a User's ID pub type UserId = usize; /// Represents a user payload #[derive(Serialize, Deserialize)] pub struct User { /// The internal user ID id: UserId, /// The auth token provided by the client token: String, /// Whether the scores will be tracked registered: bool, } /// A more lobby specific abstraction for a user #[derive(Serialize, Deserialize)] pub struct LobbyUser { /// The user ID id: UserId, /// Their nick name name: String, /// Are they ready? ready: bool, /// The colour they will be in the match color: Color, } /// An alias for a Room ID pub type LobbyId = usize; /// Represent a lobby #[derive(Serialize, Deserialize)] pub struct Lobby { /// The ID of the lobby pub id: LobbyId, /// A set of user IDs pub players: Vec, /// The name of the map pub map: String, /// Settings pub settings: Vec, } /// An alias for a match ID pub type MatchId = usize; /// Mapping users to a player in game #[derive(Serialize, Deserialize)] pub struct MatchUser { pub user: User, pub player: Player, } #[derive(Serialize, Deserialize)] pub struct Match { /// The match id pub id: MatchId, /// The list of active players pub players: Vec, /// The active game map pub map: Map, }