From: Ian Jackson Date: Sun, 19 Jul 2020 21:09:43 +0000 (+0100) Subject: update X-Git-Tag: otter-0.2.0~1283 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=8249a38aeed14a7784e441fd7175e9d52fd03a0b;p=otter.git update --- diff --git a/Cargo.lock.example b/Cargo.lock.example index c1b1535c..a0247554 100644 --- a/Cargo.lock.example +++ b/Cargo.lock.example @@ -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" diff --git a/src/gamestate.rs b/src/gamestate.rs index d81a03b9..843db46d 100644 --- a/src/gamestate.rs +++ b/src/gamestate.rs @@ -94,7 +94,7 @@ pub struct PieceRenderInstructions { pub face : FaceId, } -#[typetag::deserialize] +#[typetag::deserialize(tag="type")] pub trait PieceSpec { fn load(self) -> Result,SE>; } diff --git a/src/global.rs b/src/global.rs index 6136b1a3..eed160ba 100644 --- a/src/global.rs +++ b/src/global.rs @@ -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 ---------- diff --git a/src/spec.rs b/src/spec.rs index 02889209..fde18386 100644 --- a/src/spec.rs +++ b/src/spec.rs @@ -3,16 +3,40 @@ use crate::imports::*; +#[derive(Deserialize)] struct GameSpec { - players : Vec + table : Pos, + players : Vec, + pieces : Vec, } +#[derive(Deserialize)] struct PlayerSpec { nick: String, + #[serde(flatten)] access: Box, } +#[derive(Deserialize)] +struct PiecesSpec { + pos : Option, + count : Option, + name : Option, + #[serde(flatten)] + info : Box, +} + +#[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) { } }