typestar

Campos opcionales y por defecto en Rust

Claves ausentes, valores null y campos que preferirías no emitir en absoluto.

use serde::{Deserialize, Serialize};

#[derive(Debug, Serialize, Deserialize)]
struct Settings {
    theme: String,
    #[serde(default)]
    editor_mode: bool,
    #[serde(default = "default_limit")]
    time_limit: u32,
    #[serde(skip_serializing_if = "Option::is_none")]
    note: Option<String>,
}

fn default_limit() -> u32 {
    60
}

fn main() -> Result<(), serde_json::Error> {
    let s: Settings = serde_json::from_str(r#"{"theme":"monokai"}"#)?;
    println!("{:?}", s);
    println!("{}", serde_json::to_string(&s)?);
    Ok(())
}

Cómo funciona

  1. Option<T> acepta una clave ausente o un null.
  2. #[serde(default)] rellena con el valor por defecto del tipo.
  3. skip_serializing_if deja los valores vacíos fuera de la salida.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
23
Caracteres a escribir
496
Tokens
121
Ritmo de tres estrellas
105 tpm

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

Escribe este fragmento

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

← Anterior Siguiente →