chiark / gitweb /
ambassador: impl_via_ambassador: Make it handle multiple
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Wed, 11 May 2022 23:05:04 +0000 (00:05 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Wed, 11 May 2022 23:19:17 +0000 (00:19 +0100)
The result is quite nice.

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

index 236226219809633f6c20304ee5bf64d895fc8674..cfe90c00acc0e48b230d67ef08fd7195ce141d79 100644 (file)
@@ -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 {
index f9b969c7dd171c9657422fa39fb65c8b93316481..33da9663d7a81c4122e585c34160bf7db2c31d6a 100644 (file)
@@ -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]