Derivando

Os traits suportados podem ser implementados automaticamente para seus tipos personalizados, como segue:

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

fn main() {
    let p1 = Player::default(); // O _trait_ `Default` adiciona um construtor `default`.
    let mut p2 = p1.clone(); // O _trait_ `Clone` adiciona um método `clone`.
    p2.name = String::from("EldurScrollz");
    // O _trait_ `Debug` adiciona suporte para impressĂŁo com `{:?}`.
    println!("{:?} vs. {:?}", p1, p2);
}
This slide should take about 3 minutes.

A derivação Ă© implementada com macros e muitas crates fornecem macros de derivação Ășteis para adicionar funcionalidades Ășteis. Por exemplo, serde pode derivar suporte de serialização para uma struct usando #[derive(Serialize)].