Avatar ·

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