Aplanar y capturar extras en Rust
flatten funde un struct anidado en el padre, o barre las claves desconocidas.
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Serialize, Deserialize)]
struct Common {
id: u32,
created: String,
}
#[derive(Debug, Serialize, Deserialize)]
struct Record {
#[serde(flatten)]
common: Common,
name: String,
#[serde(flatten)]
extra: HashMap<String, serde_json::Value>,
}
fn main() -> Result<(), serde_json::Error> {
let raw = r#"{"id":7,"created":"2026-07-29","name":"ada",
"streak":12}"#;
let record: Record = serde_json::from_str(raw)?;
println!("{} {}", record.common.id, record.name);
println!("{:?}", record.extra.get("streak"));
Ok(())
}
Cómo funciona
flattenen un campo struct pone sus claves en línea.flattenen un mapa junta todo lo que no se nombró.- Así se modela un sobre más su carga útil.
Palabras clave y builtins usados aquí
OkResultStringfnletstructu32use
El intento, en números
- Líneas
- 26
- Caracteres a escribir
- 596
- Tokens
- 139
- Ritmo de tres estrellas
- 105 tpm
Al ritmo de tres estrellas de 105 tokens por minuto, este intento toma unos 79 segundos.
Paso 3 de 3 en Atributos de campo; paso 6 de 11 en Serde y JSON.