|  | @@ -0,0 +1,62 @@
 | 
	
		
			
				|  |  | +use serde::{Serialize, Deserialize};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +#[derive(Serialize, Deserialize)]
 | 
	
		
			
				|  |  | +#[serde(rename_all = "snake_case")]
 | 
	
		
			
				|  |  | +pub enum ClientMessage {
 | 
	
		
			
				|  |  | +    CreateGame{ game_id: String, nick: String },
 | 
	
		
			
				|  |  | +    Join{ game_id: String, nick: String },
 | 
	
		
			
				|  |  | +    LeaveLobby,
 | 
	
		
			
				|  |  | +    Ready,
 | 
	
		
			
				|  |  | +    Unready,
 | 
	
		
			
				|  |  | +    Reveal,
 | 
	
		
			
				|  |  | +    SubmitWord{ word: String },
 | 
	
		
			
				|  |  | +    SubmitGuess{ guesses: Vec<(String, String)> },
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +#[derive(Serialize, Deserialize)]
 | 
	
		
			
				|  |  | +#[serde(rename_all = "snake_case")]
 | 
	
		
			
				|  |  | +pub enum GameStateData {
 | 
	
		
			
				|  |  | +    Starting,
 | 
	
		
			
				|  |  | +    Creating{ question: String, available_chars: Vec<char> },
 | 
	
		
			
				|  |  | +    Guessing{ submitted_words: Vec<(String, Vec<char>)>, questions: Vec<String> },
 | 
	
		
			
				|  |  | +    Revealing{ round_result: RoundResultData },
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +#[derive(Serialize, Deserialize, Clone)]
 | 
	
		
			
				|  |  | +#[serde(rename_all = "snake_case")]
 | 
	
		
			
				|  |  | +pub struct PlayerData {
 | 
	
		
			
				|  |  | +    pub nick: String,
 | 
	
		
			
				|  |  | +    pub points: i64,
 | 
	
		
			
				|  |  | +    pub ready: bool,
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +#[derive(Serialize, Deserialize)]
 | 
	
		
			
				|  |  | +#[serde(rename_all = "snake_case")]
 | 
	
		
			
				|  |  | +pub struct GameData {
 | 
	
		
			
				|  |  | +    pub players: Vec<PlayerData>,
 | 
	
		
			
				|  |  | +    pub state_data: GameStateData
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +#[derive(Serialize, Deserialize, Clone)]
 | 
	
		
			
				|  |  | +#[serde(rename_all = "snake_case")]
 | 
	
		
			
				|  |  | +pub struct RoundResultData {
 | 
	
		
			
				|  |  | +    /// (player's nick, word, has revealed)
 | 
	
		
			
				|  |  | +    pub words: Vec<(String, String, bool)>,
 | 
	
		
			
				|  |  | +    pub questions: Vec<String>,
 | 
	
		
			
				|  |  | +    pub solutions: Vec<(String, String)>,
 | 
	
		
			
				|  |  | +    pub guesses: Vec<Vec<Vec<String>>>,
 | 
	
		
			
				|  |  | +    pub point_list: Vec<(String, i64)>
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +#[derive(Serialize)]
 | 
	
		
			
				|  |  | +#[serde(rename_all = "snake_case")]
 | 
	
		
			
				|  |  | +pub enum UpdateMessage {
 | 
	
		
			
				|  |  | +    GameNotFound{ game_id: String },
 | 
	
		
			
				|  |  | +//    GameAlreadyExists{ game_id: String },
 | 
	
		
			
				|  |  | +    LeftLobby{ nick: String },
 | 
	
		
			
				|  |  | +    GameState(GameData),
 | 
	
		
			
				|  |  | +    PlayerList(Vec<PlayerData>),
 | 
	
		
			
				|  |  | +    RoundResult(RoundResultData),
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 |