Rust mendukung polimorfisme dengan trait. Trait memungkinkan kita mengasosiasikan sekumpulan method dengan sebuah tipe struct.
Pertama kita mendefinisikan tanda tangan method dari sebuah trait:
trait MyTrait {
fn foo(&self);
...
}
Ketika sebuah struct mengimplementasikan sebuah trait, ini membangun sebuah kontrak yang memungkinkan kita berinteraksi secara tidak langsung dengan struct tersebut melalui tipe trait (contoh &dyn MyTrait), tanpa perlu mengetahui tipe sebenarnya.
Method trait yang diimplementasikan oleh sebuah struct didefinisikan di dalam sebuah blok implementasi:
impl MyTrait for MyStruct {
fn foo(&self) {
...
}
...
}