Rust supporta il polimorfismo con i trait. I trait ci permettono di associare un insieme di metodi a un tipo struct.
Per prima cosa definiamo le firme dei metodi di un trait:
trait MyTrait {
fn foo(&self);
...
}
Quando una struct implementa un trait, si stabilisce un contratto che ci permette di interagire indirettamente con la struct tramite il tipo trait (es. &dyn MyTrait), senza dover conoscere il tipo reale.
I metodi trait implementati da una struct sono definiti all'interno di un blocco di implementazione:
impl MyTrait for MyStruct {
fn foo(&self) {
...
}
...
}