chiark / gitweb /
Combine impls into impl_PieceSpec_for_SimplePieceSpec
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Fri, 15 Apr 2022 17:18:34 +0000 (18:18 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Fri, 15 Apr 2022 17:18:34 +0000 (18:18 +0100)
We want to add load_inert to this.  It's getting too repetitive.

We can't use generic impl on <P: SimplePieceSpec> because we need to
specxify the serde typetag.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/pieces.rs

index f6e5f867eb3c6cfcd162151ac505fa39238c116d..9d9d7b78fb9403ebc89484e512b7a1adcb86da86 100644 (file)
@@ -332,15 +332,6 @@ impl SimplePieceSpec for piece_specs::Disc {
   }
 }
 
-#[typetag::serde]
-impl PieceSpec for piece_specs::Disc {
-  #[throws(SpecError)]
-  fn load(&self, _: usize, _: &mut GPiece, _ig: &Instance, _:SpecDepth)
-          -> PieceSpecLoaded {
-    SimplePieceSpec::load(self)?
-  }
-}
-
 impl piece_specs::Rect {
   #[throws(SpecError)]
   fn xy(&self) -> Pos {
@@ -370,11 +361,16 @@ impl SimplePieceSpec for piece_specs::Rect {
   }
 }
 
-#[typetag::serde]
-impl PieceSpec for piece_specs::Rect {
-  #[throws(SpecError)]
-  fn load(&self, _: usize, _: &mut GPiece, _ig: &Instance, _:SpecDepth)
-          -> PieceSpecLoaded {
-    SimplePieceSpec::load(self)?
+macro_rules! impl_PieceSpec_for_SimplePieceSpec { { $ty:ty } => {
+  #[typetag::serde]
+  impl PieceSpec for $ty {
+    #[throws(SpecError)]
+    fn load(&self, _: usize, _: &mut GPiece, _ig: &Instance, _:SpecDepth)
+            -> PieceSpecLoaded {
+      SimplePieceSpec::load(self)?
+    }
   }
-}
+} }
+
+impl_PieceSpec_for_SimplePieceSpec!{piece_specs::Disc}
+impl_PieceSpec_for_SimplePieceSpec!{piece_specs::Rect}