Implémentation par défaut

Le compilateur Rust est capable de générer des implémentations par défaut pour certains traits.

C'est par exemple le cas pour Copy et Clone.

#![allow(unused)]
fn main() {
struct Point {
  x: i32,
  y: i32,
}

let a = Point {x: 0, y: 1 };
// Move
let b = a;
// Error
println!("x_a={}", a.x);
}
#![allow(unused)]
fn main() {
#[derive(Clone)]
struct Point {
  x: i32,
  y: i32,
}

let a = Point {x: 0, y: 1 };
// a & b are both owned
let b = a.clone();

println!("x_a={}", a.x);
}
#![allow(unused)]
fn main() {
#[derive(Clone, Copy)]
struct Point {
  x: i32,
  y: i32,
}

let a = Point {x: 0, y: 1 };
// Copy
let b = a;

println!("x_a={}", a.x);
}

Documentation: Derive