enums

Una enum se desestructura de manera similar:

// Se requiere `allow` para silenciar las advertencias porque solo se usa una
// variante.
#[allow(dead_code)]
enum Color {
    // Estos 3 se especifican únicamente por su nombre.
    Rojo,
    Azul,
    Verde,
    // Estos vinculan las tuplas `u32` a diferentes nombres: modelos de color.
    RGB(u32, u32, u32),
    HSV(u32, u32, u32),
    HSL(u32, u32, u32),
    CMY(u32, u32, u32),
    CMYK(u32, u32, u32, u32),
}

fn main() {
    let color = Color::RGB(122, 17, 40);
    // TODO ^ Prueba diferentes variantes para `color`

    println!("¿Qué color es??");
    // Una `enum` se puede desestructurar usando una `match`
    match color {
        Color::Rojo  => println!("¡El color es Rojo!"),
        Color::Azul  => println!("¡El color es Azul!"),
        Color::Verde => println!("¡El color es Verde!"),
        Color::RGB(r, g, b) =>
            println!("rojo: {}, verde: {}, y azul: {}!", r, g, b),
        Color::HSV(h, s, v) =>
            println!("matiz: {}, saturación: {}, valor: {}!", h, s, v),
        Color::HSL(h, s, l) =>
            println!("matiz: {}, saturación: {}, luminosidad: {}!", h, s, l),
        Color::CMY(c, m, y) =>
            println!("cian: {}, magenta: {}, amarillo: {}!", c, m, y),
        Color::CMYK(c, m, y, k) =>
            println!("cian: {}, magenta: {}, amarillo: {}, clave (negro): {}!",
                c, m, y, k),
        // No necesito otro brazo porque se han examinado todas las variantes
    }
}

Ve también:

modelo de colores y enum