- Utiliser derive pour générer du code (c'est magique!)
- Comprendre les derives courants
- Créer des derives personnalisés
- Voir les exemples
Imaginez un assistant 🤖 qui écrit du code pour vous:
- derive = L'assistant qui génère automatiquement
- Vous dites juste
#[derive(Debug)]→ L'assistant fait le reste! - C'est super pratique et super rapide!
C'est exactement comme derive fonctionne! C'est super magique!
┌─────────────────────────────────────────┐
│ 🤖 DERIVE = ASSISTANT 🤖 │
├─────────────────────────────────────────┤
│ │
│ #[derive(Debug)] │
│ struct User { ... } │
│ │ │
│ ▼ Assistant génère │
│ impl Debug for User { ... } │
│ │
│ Code automatique! ✨ │
│ │
└─────────────────────────────────────────┘
Mnémonique: "Assistant" - derive est comme un assistant: vous demandez avec #[derive(...)], il génère le code automatiquement!
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
struct Point {
x: i32,
y: i32,
}
fn main() {
let p1 = Point { x: 0, y: 0 };
let p2 = p1.clone(); // Clone généré automatiquement
println!("{:?}", p1); // Debug généré automatiquement
assert_eq!(p1, p2); // PartialEq généré automatiquement
}use serde::{Serialize, Deserialize};
#[derive(Serialize, Deserialize)]
struct Config {
host: String,
port: u16,
}
fn main() {
let config = Config {
host: "localhost".to_string(),
port: 8080,
};
let json = serde_json::to_string(&config).unwrap();
println!("{}", json);
}// Standards
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
// Externes
#[derive(Serialize, Deserialize)] // serde
#[derive(Error)] // thiserrorUn trait est "derivable" si on peut utiliser #[derive(Trait)] pour générer automatiquement l'implémentation.
Les derives génèrent du code à la compilation :
- Vérifier le code généré
- Tester les cas limites
- Documenter le comportement