From: Ian Jackson Date: Sat, 13 Feb 2021 02:04:03 +0000 (+0000) Subject: pieces: Make SimplePieceSpec suitable for deserialize X-Git-Tag: otter-0.4.0~518 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=ff1b8719169c6263ff9d74bc2e30b7ff2b868b63;p=otter.git pieces: Make SimplePieceSpec suitable for deserialize Signed-off-by: Ian Jackson --- diff --git a/src/pieces.rs b/src/pieces.rs index ba314a6d..7d146557 100644 --- a/src/pieces.rs +++ b/src/pieces.rs @@ -14,7 +14,7 @@ type SE = SVGProcessingError; #[derive(Debug,Serialize,Deserialize)] // todo: this serialisation is rather large -struct SimpleShape { +pub struct SimpleShape { desc: Html, path: Html, colours: ColourMap, @@ -213,13 +213,15 @@ impl SimpleShape { } } -trait SimplePieceSpec { +#[typetag::serde(tag="type")] +pub trait SimplePieceSpec: Debug { fn load_raw(&self) -> Result<(SimpleShape, &SimpleCommon), SpecError>; fn load(&self) -> Result, SpecError> { Ok(Box::new(self.load_raw()?.0)) } } +#[typetag::serde] impl SimplePieceSpec for piece_specs::Disc { #[throws(SpecError)] fn load_raw(&self) -> (SimpleShape, &SimpleCommon) { @@ -251,6 +253,7 @@ impl piece_specs::Square { } } +#[typetag::serde] impl SimplePieceSpec for piece_specs::Square { #[throws(SpecError)] fn load_raw(&self) -> (SimpleShape, &SimpleCommon) {