Cómo mapear valores de enum a enteros (i32, u64) en Rust?
¡Hola colegas! Acabo de empezar a aprender Rust y me encontré con un problema que parece simple, pero no encuentro una solución elegante.
Tengo un enum `Color` que describe colores:
```rust
enum Color {
Red,
Green,
Blue,
}
```
Quiero asignar a cada variante un valor entero, de modo que, por ejemplo, `Red` corresponda a 0, `Green` a 1, `Blue` a 2. Y luego necesito:
1. Obtener un número a partir de la variante del enum (por ejemplo, de `Color::Green` obtener `1`).
2. Hacer la conversión inversa: dado un número (por ejemplo, `2`) obtener la variante `Color::Blue`.
En C++ o C# simplemente escribiría `(int)color` o `(Color)2`. En Python usaría un diccionario. Pero en Rust los tipos son más estrictos.
Intenté usar `as`:
```rust
let c = Color::Red;
let n = c as i32; // Error: non-primitive cast
```
El compilador se queja: `non-primitive cast`. Leí sobre `#[repr(i32)]`, pero no estoy seguro de que sea correcto. ¿Y cómo hacer la conversión inversa? Escriban