pub trait Middleware<C, H>: Sendwhere
    C: Connection,
    H: Handler<C>,{
    type Error: Debug;
    // Required method
    fn handle(&self, connection: &mut C, handler: &H) -> Result<(), Self::Error>;
    // Provided method
    fn compose(self, handler: H) -> CompositeHandler<Self, H>
       where Self: Sized { ... }
}