From 0fab0e8c5691f74996920d33bdbe2c5f91b17955 Mon Sep 17 00:00:00 2001
From: Tangent Wantwight <tangent128@gmail.com>
Date: Mon, 18 May 2020 20:53:28 -0400
Subject: [PATCH] Create Serde structs for messages

---
 Cargo.toml     |  3 ++-
 src/main.rs    |  2 ++
 src/net/mod.rs | 31 +++++++++++++++++++++++++++++++
 3 files changed, 35 insertions(+), 1 deletion(-)
 create mode 100644 src/net/mod.rs

diff --git a/Cargo.toml b/Cargo.toml
index e7d7c9c..e50a984 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -10,6 +10,7 @@ env_logger = "0.7"
 futures = "0.3"
 log = "0.4"
 structopt = "0.3"
-serde = "1"
+serde = {version = "1", features = ["derive"]}
+serde_json = "1"
 tokio = {version = "0.2", features = ["macros"]}
 warp = "0.2"
diff --git a/src/main.rs b/src/main.rs
index 80f4c9d..8c7e4ba 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -7,6 +7,8 @@ use structopt::StructOpt;
 use warp::{serve, ws, ws::Ws, Filter};
 use ws::Message;
 
+pub mod net;
+
 #[derive(StructOpt)]
 /// Server for base2020 lockstep protocol for multiplayer games.
 struct Args {
diff --git a/src/net/mod.rs b/src/net/mod.rs
new file mode 100644
index 0000000..9573fd3
--- /dev/null
+++ b/src/net/mod.rs
@@ -0,0 +1,31 @@
+use serde::{Deserialize, Serialize};
+
+#[derive(Deserialize, Debug)]
+#[serde(tag = "t")]
+pub enum ClientMessage<I, S> {
+    #[serde(rename = "s")]
+    SetState { s: S },
+    #[serde(rename = "i")]
+    Input { i: I },
+    #[serde(rename = "g")]
+    GetState { c: usize, s: S },
+}
+
+#[derive(Serialize, Debug)]
+pub struct Meta {
+    helo: Option<String>,
+    version: &'static str,
+}
+
+#[derive(Serialize, Debug)]
+#[serde(tag = "t")]
+pub enum ServerMessage<I, S> {
+    #[serde(rename = "m")]
+    Meta { m: Meta },
+    #[serde(rename = "s")]
+    SetState { u: i8, s: S },
+    #[serde(rename = "i")]
+    Input { i: I },
+    #[serde(rename = "g")]
+    GetState { c: usize },
+}