cards/lib/src/lib.rs
2024-11-15 21:41:21 -05:00

187 lines
4.4 KiB
Rust

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<String>,
}
/// 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<WhiteCardMeta>,
}
/// Judge round
#[derive(Clone, Message, Serialize, Deserialize)]
pub struct JudgeRound {
#[prost(message, repeated, tag = "1")]
pub entries: Vec<JudgeEntry>,
}
/// 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<String>,
}
/// 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<GamePlayerMeta>,
#[prost(string, tag = "5")]
pub czar: String,
#[prost(bytes, tag = "6")]
pub packs: Vec<u8>,
#[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,
}
/// Black card meta
#[derive(Clone, Message, Serialize, Deserialize)]
pub struct BlackCardMeta {
#[prost(string, tag = "1")]
pub text: String,
#[prost(uint32, tag = "2")]
pub pick: u32,
}
/// Game state meta
#[derive(Clone, Message, Serialize, Deserialize)]
pub struct GameStateMeta {
#[prost(message, tag = "1")]
pub black: Option<BlackCardMeta>, // this has to be an option or prost gets cranky
#[prost(message, repeated, tag = "2")]
pub white: Vec<WhiteCardMeta>,
}
/// 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<u8>,
}
/// 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<CardPackMeta>,
pub unofficial_meta: Vec<CardPackMeta>,
}
/// Games update
#[derive(Serialize, Deserialize, Debug)]
pub struct GamesUpdate {
pub games: Vec<GameBrowserMeta>,
}
/// Chat update
#[derive(Serialize, Deserialize, Debug)]
pub struct ChatUpdate {
pub room: String,
pub users: Vec<String>,
}
/// 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<String>,
}