typestar

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

  1. flatten en un campo struct pone sus claves en línea.
  2. flatten en un mapa junta todo lo que no se nombró.
  3. Así se modela un sobre más su carga útil.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 3 de 3 en Atributos de campo; paso 6 de 11 en Serde y JSON.

← Anterior Siguiente →