From 06aa076c06bd1aca099ffd37de0feb8fa8166f3b Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Fri, 15 Apr 2022 18:18:34 +0100 Subject: [PATCH] Combine impls into impl_PieceSpec_for_SimplePieceSpec We want to add load_inert to this. It's getting too repetitive. We can't use generic impl on because we need to specxify the serde typetag. Signed-off-by: Ian Jackson --- src/pieces.rs | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/src/pieces.rs b/src/pieces.rs index f6e5f867..9d9d7b78 100644 --- a/src/pieces.rs +++ b/src/pieces.rs @@ -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} -- 2.30.2