From 2b5d493391d9435b7ce4922e300d79c908d865bf Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Thu, 12 May 2022 00:05:04 +0100 Subject: [PATCH] ambassador: impl_via_ambassador: Make it handle multiple The result is quite nice. Signed-off-by: Ian Jackson --- src/fastsplit.rs | 13 +++++-------- src/utils.rs | 12 +++++++----- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/src/fastsplit.rs b/src/fastsplit.rs index 23622621..cfe90c00 100644 --- a/src/fastsplit.rs +++ b/src/fastsplit.rs @@ -59,15 +59,12 @@ impl Piece { impl_via_ambassador!{ #[dyn_upcast] impl OutlineTrait for Piece { inner() } -} -#[dyn_upcast] -impl PieceBaseTrait for Piece { - ambassador_impl_PieceBaseTrait! {body_struct(<>, _, (), (inner()), ())} -} -#[typetag::serde(name="FastSplit")] -impl PieceTrait for Piece { - ambassador_impl_PieceTrait! {body_struct(<>, _, (), (inner()), ())} + #[dyn_upcast] + impl PieceBaseTrait for Piece { inner() } + + #[typetag::serde(name="FastSplit")] + impl PieceTrait for Piece { inner() } } impl Record { diff --git a/src/utils.rs b/src/utils.rs index f9b969c7..33da9663 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -776,10 +776,12 @@ paste!{ #[macro_export] macro_rules! impl_via_ambassador{ { - $( #[ $attr:meta ] )* - impl $Trait:ident for $Type:ty - { $($how_immut:tt)* } - } => { paste!{ + $( + $( #[ $attr:meta ] )* + impl $Trait:ident for $Type:ty + { $($how_immut:tt)* } + )* + } => { $( paste!{ $( #[ $attr ] )* impl $Trait for $Type { [< ambassador_impl_ $Trait >]!{ body_struct( <>, dyn $Trait, @@ -788,7 +790,7 @@ macro_rules! impl_via_ambassador{ () ) } } - } } + } )* } } #[macro_export] -- 2.30.2