chiark / gitweb /
use typetag
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Wed, 15 Jul 2020 22:40:28 +0000 (23:40 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Wed, 15 Jul 2020 22:40:28 +0000 (23:40 +0100)
src/gamestate.rs
src/pieces.rs

index 6b35f1dae2df410939d3ae50e595fff4d88726e0..9aad9064acf4beedb555a19d4856b298213f5470 100644 (file)
@@ -47,7 +47,6 @@ pub struct GameState {
 #[derive(Debug,Serialize,Deserialize)]
 pub struct PieceState {
   pub pos : Pos,
-  #[serde(with="self::piece_serde")]
   pub p : Box<dyn Piece>,
   pub face : FaceId,
   pub held : Option<PlayerId>,
@@ -72,6 +71,7 @@ pub struct LogEntry {
 type SE = SVGProcessingError;
 type SR = Result<(),SE>;
 
+#[typetag::serde]
 pub trait Piece : Send + Debug {
   // #[throws] doesn't work here for some reason
   fn svg_piece(&self, f: &mut String, pri: &PieceRenderInstructions) -> SR;
@@ -177,21 +177,6 @@ impl PieceState {
   }
 }
 
-// ---------- pice load and save ----------
-
-mod piece_serde {
-  use crate::gamestate::*;
-  use serde::Serializer;
-  #[throws(S::Error)]
-  pub fn serialize<S:Serializer>(pc : &Box<dyn Piece>, s:S) -> S::Ok {
-    s.serialize_none()?
-  }
-  #[throws(D::Error)]
-  pub fn deserialize<'d,D:Deserializer<'d>>(d:D) -> Box<dyn Piece> {
-    panic!();
-  }
-}
-
 // ========== ad-hoc and temporary ==========
 
 pub fn make_pieceid_visible(p : PieceId) -> VisiblePieceId {
index e35ca68ca2daee6eed2cc43cb7d688a49099eedd..12f6fb5b679dfbe0245c3add4c7b1eccd86c93f9 100644 (file)
@@ -78,6 +78,7 @@ eprintln!("rescaled by {}: {} as {}",scale,&input,&out);
   out
 }
 
+#[typetag::serde]
 impl Piece for SimpleShape {
   #[throws(SE)]
   fn svg_piece(&self, f: &mut String, pri: &PieceRenderInstructions) {