typestar

Enums y etiquetado en Rust

Cómo cruza el cable un enum: con etiqueta interna, sin etiqueta o como cadena simple.

use serde::{Deserialize, Serialize};

#[derive(Debug, Serialize, Deserialize)]
#[serde(tag = "kind", rename_all = "lowercase")]
enum Event {
    Start { lang: String },
    Finish { tpm: u32, stars: u8 },
}

#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
enum Theme {
    Default,
    Monokai,
}

fn main() -> Result<(), serde_json::Error> {
    let events = vec![
        Event::Start { lang: "rust".to_string() },
        Event::Finish { tpm: 104, stars: 3 },
    ];
    println!("{}", serde_json::to_string(&events)?);
    println!("{}", serde_json::to_string(&Theme::Monokai)?);
    Ok(())
}

Cómo funciona

  1. Un atributo tag escribe el nombre de la variante en un campo.
  2. untagged coincide por forma en vez de por etiqueta.
  3. Un enum de variantes unitarias se serializa como cadena simple.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
25
Caracteres a escribir
572
Tokens
154
Ritmo de tres estrellas
105 tpm

Al ritmo de tres estrellas de 105 tokens por minuto, este intento toma unos 88 segundos.

Escribe este fragmento

Paso 2 de 2 en Formas; paso 8 de 11 en Serde y JSON.

← Anterior Siguiente →