В Rust есть сокращение для записи факта того, что обобщенный тип ограничен каким-то типажом:
fn my_function(foo: impl Foo) { ... }
Что эквивалентно записи:
fn my_function<T>(foo: T) where T:Foo { ... }