Derivación de Traits

Las macros de derivación de Rust funcionan generando automáticamente código que implementa los traits especificados para una estructura de datos.

Puedes dejar que el compilador derive una serie de traits de la siguiente manera:

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

fn main() {
    let p1 = Player::default();
    let p2 = p1.clone();
    println!("Is {:?}\nequal to {:?}?\nThe answer is {}!", &p1, &p2,
             if p1 == p2 { "yes" } else { "no" });
}