Generik di Rust bekerja beriringan dengan trait. Ketika kita mendeskripsikan sebuah tipe terparameterisasi T, kita dapat membatasi tipe apa saja yang dapat digunakan sebagai argumen, dengan mendaftar trait apa yang harus diimplementasikan oleh argumen tersebut.
Di contoh ini, tipe T harus mengimplementasikan Foo:
fn my_function<T>(foo: T)
where
T:Foo
{
...
}
Dengan menggunakan generik, kita membuat fungsi bertipe statis pada saat kompilasi dengan tipe dan ukuran yang diketahui, yang memungkinkan kita melakukan dispatch statis dan menyimpannya sebagai nilai berukuran diketahui.