Derivación de Traits

Los traits compatibles se pueden implementar de forma automática en los tipos personalizados de la siguiente manera:

#[derive(Debug, Clone, Default)]
struct Player {
    name: String,
    strength: u8,
    hit_points: u8,
}

fn main() {
    let p1 = Player::default(); // El trait predeterminado añade el constructor `default`.
    let mut p2 = p1.clone(); // El trait clonado añade el método `clone`.
    p2.name = String::from("EldurScrollz");
    // El trait Debug permite que sea compatible con imprimir con `{:?}`.
    println!("{:?} contra {:?}", p1, p2);
}
This slide should take about 3 minutes.

La derivación se implementa con macros y muchos crates ofrecen macros de derivación útiles para añadir funciones. Por ejemplo, serde puede derivar la compatibilidad con la serialización para una struct con #[derive(Serialize)].