1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
use uuid::Uuid; use std::collections::HashSet; use super::*; use utils::*; use state::*; use state::grids::*; pub static PROTOCOL_VERSION: &'static str = "0.4"; #[derive(PartialEq, Clone, Debug, Serialize, Deserialize)] #[serde(tag = "kind", content = "data", rename_all = "snake_case")] pub enum Msg { Version { sirpent: String, protocol: String }, Register { desired_name: String, kind: ClientKind, }, Welcome { name: String, grid: GridEnum, timeout_millis: Option<Milliseconds>, }, Game { game: Box<GameState> }, Round { round: Box<RoundState>, game_uuid: Uuid, }, Move { direction: Direction }, Outcome { winners: HashSet<String>, conclusion: Box<RoundState>, game_uuid: Uuid, }, } impl Msg { pub fn version() -> Msg { Msg::Version { sirpent: env!("CARGO_PKG_VERSION").to_string(), protocol: PROTOCOL_VERSION.to_string(), } } pub fn welcome<G>(name: String, grid: G, timeout_millis: Option<Milliseconds>) -> Msg where G: Into<GridEnum> { Msg::Welcome { name: name, grid: grid.into(), timeout_millis: timeout_millis, } } pub fn outcome(final_round_state: RoundState, game_uuid: Uuid) -> Msg { Msg::Outcome { winners: final_round_state.snakes.keys().cloned().collect(), conclusion: Box::new(final_round_state), game_uuid: game_uuid, } } }