chiark / gitweb /
update
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 19 Jul 2020 21:09:43 +0000 (22:09 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Tue, 21 Jul 2020 21:21:42 +0000 (22:21 +0100)
Cargo.lock.example
src/gamestate.rs
src/global.rs
src/spec.rs

index c1b1535c59db38622001360cbbb75c2e536a082d..a02475549839e141e855d65da07f7756f9d8090a 100644 (file)
@@ -646,9 +646,9 @@ checksum = "b294d6fa9ee409a054354afc4352b0b9ef7ca222c69b8812cbea9e7d2bf3783f"
 
 [[package]]
 name = "libc"
-version = "0.2.72"
+version = "0.2.73"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a9f8082297d534141b30c8d39e9b1773713ab50fdbe4ff30f750d063b3bfd701"
+checksum = "bd7d4bd64732af4bf3a67f367c27df8520ad7e230c5817b8ff485864d80242b9"
 
 [[package]]
 name = "log"
index d81a03b96e0ad16baed11018761b05bea5c0bc2f..843db46d9b23b9bb4df9ff9363a827a6b9873e8e 100644 (file)
@@ -94,7 +94,7 @@ pub struct PieceRenderInstructions {
   pub face : FaceId,
 }
 
-#[typetag::deserialize]
+#[typetag::deserialize(tag="type")]
 pub trait PieceSpec {
   fn load(self) -> Result<Box<dyn Piece>,SE>;
 }
index 6136b1a3803480b295b2a8a027a4b9b7253526b9..eed160ba440def5269a5bc9f1e7956f19312bc73 100644 (file)
@@ -9,7 +9,8 @@ const SAVE_DIRECTORY : &str = "save";
 
 visible_slotmap_key!{ ClientId('C') }
 
-#[derive(Clone,Debug,Eq,PartialEq,Ord,PartialOrd,Hash)]
+#[derive(Clone,Debug,Eq,PartialEq,Ord,PartialOrd,Hash,Deserialize)]
+#[serde(transparent)]
 pub struct RawToken (pub String);
 
 // ---------- data structure ----------
index 02889209b12af5809fe35816b6c4d5da4fde4cd6..fde1838663924b3a4b967309ea3968bee63ebba7 100644 (file)
@@ -3,16 +3,40 @@
 
 use crate::imports::*;
 
+#[derive(Deserialize)]
 struct GameSpec {
-  players : Vec<PlayerSpec>
+  table : Pos,
+  players : Vec<PlayerSpec>,
+  pieces : Vec<PiecesSpec>,
 }
 
+#[derive(Deserialize)]
 struct PlayerSpec {
   nick: String,
+  #[serde(flatten)]
   access: Box<dyn PlayerAccessSpec>,
 }
 
+#[derive(Deserialize)]
+struct PiecesSpec {
+  pos : Option<Pos>,
+  count : Option<u32>,
+  name : Option<String>,
+  #[serde(flatten)]
+  info : Box<dyn PieceSpec>,
+}
+
+#[typetag::deserialize(tag="access")]
 trait PlayerAccessSpec {
   #[throws(OE)]
   fn make_token(&self) -> RawToken { RawToken::new_random()? }
+  fn deliver_token(&mut self) -> Result<(),OE>;
+}
+
+#[typetag::deserialize]
+impl PlayerAccessSpec for RawToken {
+  #[throws(OE)]
+  fn make_token(&self) -> RawToken { self.clone() }
+  #[throws(OE)]
+  fn deliver_token(&mut self) { }
 }