TODO: Dynamic traits are not supported yet. please use a compile time generic instead.
I have tried using a Pointer[Middleware]` but you need the type to cast and make the call. I also tried passing in a concrete middleware type as a parameter at compile time but it requires some really ugly code to chain them together.