use prost::Message; use serde::{Deserialize, Serialize}; use std::collections::HashSet; /// Judge decision #[derive(Clone, Serialize, Deserialize, Message)] pub struct JudgeDecisionRequest { #[prost(string, tag = "1")] pub game_id: String, #[prost(string, repeated, tag = "2")] pub winning_cards: Vec, } /// White Card Meta #[derive(Clone, Message, Hash, Eq, PartialEq, Serialize, Deserialize)] pub struct WhiteCardMeta { #[prost(string, tag = "1")] pub uuid: String, #[prost(string, tag = "2")] pub text: String, } /// Judge entry #[derive(Clone, Message, Serialize, Deserialize)] pub struct JudgeEntry { #[prost(message, repeated, tag = "1")] pub cards_to_judge: Vec, } /// Judge round #[derive(Clone, Message, Serialize, Deserialize)] pub struct JudgeRound { #[prost(message, repeated, tag = "1")] pub entries: Vec, } /// Delete game request #[derive(Message, Serialize, Deserialize)] pub struct GameDeleteRequest { #[prost(string, tag = "1")] pub delete_game_id: String, } /// Game join request #[derive(Message, Serialize, Deserialize)] pub struct GameJoinRequest { #[prost(string, tag = "1")] pub id: String, } /// Player Move Request #[derive(Clone, Message, Serialize, Deserialize)] pub struct PlayerMoveRequest { #[prost(string, tag = "1")] pub game_id: String, #[prost(string, repeated, tag = "2")] pub card_ids: Vec, } /// Game Player Meta #[derive(Clone, Message, Serialize, Deserialize)] pub struct GamePlayerMeta { #[prost(string, tag = "1")] pub name: String, #[prost(uint32, tag = "2")] pub score: u32, #[prost(bool, tag = "3")] pub submitted: bool, } /// Game meta #[derive(Clone, Message, Serialize, Deserialize)] pub struct GameMeta { #[prost(string, tag = "1")] pub uuid: String, #[prost(string, tag = "2")] pub name: String, #[prost(string, tag = "3")] pub host: String, #[prost(message, repeated, tag = "4")] pub players: Vec, #[prost(string, tag = "5")] pub czar: String, #[prost(bytes, tag = "6")] pub packs: Vec, #[prost(uint32, tag = "7")] pub white_count: u32, #[prost(uint32, tag = "8")] pub black_count: u32, #[prost(uint32, tag = "9")] pub white_discard_count: u32, } /// Game state meta #[derive(Clone, Debug, Serialize, Deserialize)] pub struct GameStateMeta { pub black: (String, u8), pub white: Vec, } /// Game browser meta #[derive(Clone, Debug, Serialize, Deserialize)] pub struct GameBrowserMeta { pub uuid: String, pub name: String, pub host: String, pub players: usize, pub packs: Vec, } /// Card Pack Meta #[derive(Clone, Debug, Serialize, Deserialize)] pub struct CardPackMeta { pub name: String, pub pack: String, pub num_white: usize, pub num_black: usize, } /// Card Packs Meta #[derive(Clone, Debug, Serialize, Deserialize)] pub struct CardPacksMeta { pub official_meta: Vec, pub unofficial_meta: Vec, } /// Games update #[derive(Serialize, Deserialize, Debug)] pub struct GamesUpdate { pub games: Vec, } /// Chat update #[derive(Serialize, Deserialize, Debug)] pub struct ChatUpdate { pub room: String, pub users: Vec, } /// User login request (to change name) #[derive(Serialize, Deserialize, Debug)] pub struct UserLogInRequest { pub username: String, } /// Response to user name change containing new name #[derive(Serialize, Deserialize, Debug)] pub struct UserUpdate { pub username: String, } /// Chat message #[derive(Serialize, Deserialize, Debug)] pub struct ChatMessage { pub text: String, } /// Server user count #[derive(Serialize, Deserialize, Debug)] pub struct ServerOnlineUsers { pub online_users: usize, } /// Server games count #[derive(Serialize, Deserialize, Debug)] pub struct ServerActiveGames { pub active_games: usize, } /// New game request structure #[derive(Debug, Serialize, Deserialize)] pub struct NewGameRequest { /// Game name pub name: String, pub packs: HashSet, }