chiark / gitweb /
wip addpiece
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 25 Jul 2020 19:42:41 +0000 (20:42 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 25 Jul 2020 19:42:41 +0000 (20:42 +0100)
src/cmdlistener.rs
src/commands.rs
src/gamestate.rs
src/pieces.rs
src/spec.rs

index 89cd3184c0d336fd39b85d628051528533744bde..404ff021c09c1c0cd102ea1d30d1fe68bbef5705 100644 (file)
@@ -72,6 +72,8 @@ fn decode_process_inner(s: &str)-> MgmtResponse {
 fn execute(cmd: MgmtCommand) -> MgmtResponse {
   match cmd {
     Noop { } => Fine { },
+    AddPiece(_) => Fine {
+    }, // xxx
   }
 }
 
index a5ba28d4b4192581c27e59bdcd99da4e363246d2..10cc788b00df2cc07fed30f5b7e2fb84934e58c9 100644 (file)
@@ -3,7 +3,8 @@ use crate::imports::*;
 
 #[derive(Debug,Serialize,Deserialize)]
 pub enum MgmtCommand {
-  Noop { }
+  Noop { },
+  AddPiece(Box<dyn PieceSpec>),
 }
 
 #[derive(Debug,Serialize,Deserialize)]
index 843db46d9b23b9bb4df9ff9363a827a6b9873e8e..ce6633e3336c2a961f6f3fddca6cd7b08f87deb9 100644 (file)
@@ -94,8 +94,8 @@ pub struct PieceRenderInstructions {
   pub face : FaceId,
 }
 
-#[typetag::deserialize(tag="type")]
-pub trait PieceSpec {
+#[typetag::serde(tag="type")]
+pub trait PieceSpec : Debug {
   fn load(self) -> Result<Box<dyn Piece>,SE>;
 }
 
index ca1275891cc1fe247384177f55f47d589df8d89d..1ed2e3660d95ec8c29a6e17992c7fa7e237821da 100644 (file)
@@ -122,7 +122,7 @@ impl SimpleShape {
   }
 }
 
-#[derive(Deserialize)]
+#[derive(Serialize,Deserialize)]
 #[derive(Debug,Default)]
 #[repr(transparent)]
 struct ColourSpec(String);
@@ -136,19 +136,19 @@ impl TryFrom<ColourSpec> for Colour {
   }
 }
 
-#[derive(Debug,Deserialize)]
+#[derive(Debug,Serialize,Deserialize)]
 struct Disc {
   diam : Coord,
   faces : Vec<ColourSpec>,
 }
 
-#[derive(Debug,Deserialize)]
+#[derive(Debug,Serialize,Deserialize)]
 struct Square {
   size : Vec<Coord>,
   faces : Vec<ColourSpec>,
 }
 
-#[typetag::deserialize]
+#[typetag::serde]
 impl PieceSpec for Disc {
   #[throws(SE)]
   fn load(self) -> Box<dyn Piece> {
@@ -162,7 +162,7 @@ impl PieceSpec for Disc {
   }
 }
 
-#[typetag::deserialize]
+#[typetag::serde]
 impl PieceSpec for Square {
   #[throws(SE)]
   fn load(self) -> Box<dyn Piece> {
index fde1838663924b3a4b967309ea3968bee63ebba7..aba45f4555a64a0faa6be2cdaf4b57a3bf58dcc1 100644 (file)
@@ -3,21 +3,21 @@
 
 use crate::imports::*;
 
-#[derive(Deserialize)]
+#[derive(Debug,Deserialize)]
 struct GameSpec {
   table : Pos,
   players : Vec<PlayerSpec>,
   pieces : Vec<PiecesSpec>,
 }
 
-#[derive(Deserialize)]
+#[derive(Debug,Deserialize)]
 struct PlayerSpec {
   nick: String,
   #[serde(flatten)]
   access: Box<dyn PlayerAccessSpec>,
 }
 
-#[derive(Deserialize)]
+#[derive(Debug,Deserialize)]
 struct PiecesSpec {
   pos : Option<Pos>,
   count : Option<u32>,
@@ -27,7 +27,7 @@ struct PiecesSpec {
 }
 
 #[typetag::deserialize(tag="access")]
-trait PlayerAccessSpec {
+trait PlayerAccessSpec : Debug {
   #[throws(OE)]
   fn make_token(&self) -> RawToken { RawToken::new_random()? }
   fn deliver_token(&mut self) -> Result<(),OE>;