- Remove defaults from trait generic type parameters (i.e. TraitName<TypeParameter = ...>) to prevent intermediate types that impl the trait from not themselves allowing the default type parameter to be overridden.
- Move common bounds up from implementers of the Service trait to the Service trait itself. This both reduces boilerplate and reduces the chances of a type having stricter bounds on the struct and fns (such as fn new()) than its Service trait impl, making it hard to find the cause of a bounds mismatch.
- Align bounds on all middleware struct blocks to match the bounds on the Service trait impls to catch mismatched bounds earlier.
- Remove unnecessary ?Sized bound on impl Service for U where U: Deref.
- Remove unnecessary default type specifications.
- Add run: cargo test --doc to test doc explicitly.
- Set the default shell to bash.
---------
Co-authored-by: Philip Homburg <philip@nlnetlabs.nl>