[[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"
pub face : FaceId,
}
-#[typetag::deserialize]
+#[typetag::deserialize(tag="type")]
pub trait PieceSpec {
fn load(self) -> Result<Box<dyn Piece>,SE>;
}
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 ----------
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) { }
}