pub trait MiddlewareDispatch<M> {
// Required method
fn invoke(&self, mcx: &MiddlewareContext, msg: M);
// Provided method
fn fuse<L>(self, middleware: L) -> CompositeDispatch<L, Self>
where Self: Sized + Clone,
L: Middleware<M, Self> { ... }
}