Qué hace esta herramienta
Una muestra JSON pasa a ser structs de Rust con derivaciones serde.
{ "id": 1, "firstName": "Ada", "address": { "city": "Paris" } }
use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize)]
pub struct Root {
pub id: i64,
#[serde(rename = "firstName")]
pub first_name: String,
pub address: Address,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Address {
pub city: String,
}
Los nombres de campo de Rust van en snake_case: firstName pasa a first_name, y #[serde(rename)] conserva la clave, porque un struct que ya no lee su propio JSON sería peor que un nombre poco idiomático. El rename aparece solo donde los dos difieren.
Si solo lees la carga, la opción que quita Serialize te da #[derive(Debug, Deserialize)] y un trait menos que satisfacer.
Las palabras clave, crudas o con sufijo
{ "type": "user", "self": "/users/1" }
pub r#type: String,
#[serde(rename = "self")]
pub self_: String,
r#type es un identificador crudo: serde ya lo serializa como type, no hace falta atributo. self es de las pocas palabras que Rust no admite ni como identificador crudo —self, Self, crate, super—, así que recibe un guion bajo y un rename.
Lo que viene de serde_json
null, los valores desconocidos, los arrays vacíos y los mezclados acaban todos en serde_json::Value:
pub nickname: Option<serde_json::Value>,
pub tags: Vec<serde_json::Value>,
así que serde_json tiene su sitio en tu Cargo.toml, junto a serde y su característica derive. La ruta se escribe entera en vez de importarse, lo que mantiene la salida válida sea cual sea la organización de tus módulos.
Lo que una muestra no puede decir
Solo null produce un Option. Todo lo demás es obligatorio, porque el documento traía un valor, y «a veces ausente» no es algo que un documento pueda mostrar. Envolver un campo en Option<T> es un retoque; #[serde(default)] es otro, cuando la ausencia debe valer el valor por defecto en vez de un error.
Dos claves que dan el mismo snake_case —fooBar y foo_bar— llevan sufijo en vez de fundirse, y cada una conserva su rename.
Privado por diseño
Todo se ejecuta localmente en tu navegador con JavaScript. Tus datos nunca se suben a un servidor, lo que hace que la herramienta sea segura para contenido sensible y funcione sin conexión.