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
- Un atributo
tagescribe el nombre de la variante en un campo. untaggedcoincide por forma en vez de por etiqueta.- Un enum de variantes unitarias se serializa como cadena simple.
Palabras clave y builtins usados aquí
DefaultOkResultStringenumfnletu32u8use
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.
Paso 2 de 2 en Formas; paso 8 de 11 en Serde y JSON.