}
}
-#[dyn_upcast]
-impl OutlineTrait for Piece {
- ambassador_impl_OutlineTrait! {body_struct(<>, _, (), (inner()), ())}
+impl_via_ambassador!{
+ #[dyn_upcast]
+ impl OutlineTrait for Piece { inner() }
}
+
#[dyn_upcast]
impl PieceBaseTrait for Piece {
ambassador_impl_PieceBaseTrait! {body_struct(<>, _, (), (inner()), ())}
pub use crate::{deref_to_field, deref_to_field_mut};
pub use crate::ensure_eq;
pub use crate::format_by_fmt_hex;
+pub use crate::impl_via_ambassador;
pub use crate::matches_doesnot;
pub use crate::trace_dbg;
pub use crate::{want, wantok, wants, want_let, want_failed_internal};
pub fn [<x x x>]<T>() -> T { panic!("todo item triggered") }
}
+#[macro_export]
+macro_rules! impl_via_ambassador{
+ {
+ $( #[ $attr:meta ] )*
+ impl $Trait:ident for $Type:ty
+ { $($how_immut:tt)* }
+ } => { paste!{
+ $( #[ $attr ] )*
+ impl $Trait for $Type {
+ [< ambassador_impl_ $Trait >]!{ body_struct( <>, _,
+ (),
+ ($($how_immut)*),
+ ()
+ ) }
+ }
+ } }
+}
+
#[macro_export]
macro_rules! trace_dbg {
($msg:expr $(,$val:expr)*) => {