Avatar ·

Comment mapper des valeurs d'énumération (enum) à un entier (i32, u64) en Rust ?

Bonjour, collègues ! Je viens de commencer à apprendre Rust et j'ai rencontré un problème qui semble simple, mais je ne trouve pas de solution élégante. J'ai une énumération `Color` qui décrit des couleurs : ```rust enum Color { Red, Green, Blue, } ``` Je veux assigner à chaque variante une valeur entière, par exemple que `Red` corresponde à 0, `Green` à 1, `Blue` à 2. Ensuite, j'ai besoin : 1. D'obtenir le nombre à partir de la variante de l'énumération (par exemple, de `Color::Green` obtenir `1`). 2. De faire la conversion inverse : à partir d'un nombre (par exemple `2`) obtenir la variante `Color::Blue`. En C++ ou C#, j'écrirais simplement `(int)color` ou `(Color)2`. En Python, j'utiliserais un dictionnaire. Mais en Rust, tout est plus strict avec les types. J'ai essayé d'utiliser `as` : ```rust let c = Color::Red; let n = c as i32; // Erreur : non-primitive cast ``` Le compilateur se plaint : `non-primitive cast`. J'ai lu à propos de `#[repr(i32)]`, mais je ne suis pas sûr que ce soit correct. Et comment faire la conversion inverse ? Écrivez