Rust wspiera polimorfizm przy pomocy cech (ang. traits). Cechy pozwalają nam powiązać zestaw metod z typem struktury.
Najpierw definiujemy sygnatury metod danej cechy:
trait MyTrait {
fn foo(&self);
...
}
Kiedy struktura implementuje cechę, ustanawia to kontrakt, który pozwala nam pośrednio wchodzić w interakcję ze strukturą poprzez typ cechy (np. &dyn MyTrait), bez konieczności znajomości jej rzeczywistego typu.
Zaimplementowane przez strukturę metody cechy są zdefiniowane wewnątrz bloku implementacji:
impl MyTrait for MyStruct {
fn foo(&self) {
...
}
...
}