I tried the "just make it generic" route - which brought up a question that I haven't tried out ... I have to implement a ONE-generic trait on this struct, but making it generic would cause the struct to have two generic arguments ... is that an issue?
Well either way is turning put to be nigh-on impossible - SO many trait constraints to take into account in either the Box trait (tower::Service) or the generic type.
do you have to store this kind of types at the first place? such complex type typically is not meant to spell out, it is mainly used for local let bindings.
if you are making some kind of wrapper, think what is the real trait bound you require, what is the purpose your wrapper serve, not how the concrete (yet opaque) type is named.