use serde::{Deserialize, Serialize}; use serde_json::Value; pub mod server; pub type PlayerId = usize; #[derive(Deserialize, Debug)] #[serde(tag = "t")] pub enum ClientMessage<I = Value, S = Value> { #[serde(rename = "s")] SetState { s: S }, #[serde(rename = "i")] Input { i: I }, #[serde(rename = "g")] GetState { c: usize, s: S }, } #[derive(Serialize, Debug, Clone)] pub struct Meta { pub helo: Option<String>, pub version: &'static str, } #[derive(Serialize, Debug, Clone)] #[serde(tag = "t")] pub enum ServerMessage<I = Vec<Value>, S = Value> { #[serde(rename = "m")] Meta { #[serde(flatten)] m: Meta, }, #[serde(rename = "s")] SetState { u: Option<PlayerId>, s: S }, #[serde(rename = "i")] Input { i: I }, #[serde(rename = "g")] GetState { c: usize }, }