Structs Rust et Serde
Serde est la bibliothèque standard de facto pour la sérialisation JSON en Rust. Le générateur produit des définitions de struct décorées avec #[derive(Debug, Clone, Serialize, Deserialize)] — la combinaison de derives la plus courante pour les structs de données. serde_json est supposé comme runtime, donc le code généré fonctionne avec serde_json::from_str et serde_json::to_string directement.
Le mappage de types suit les idiomes Rust : les chaînes JSON deviennent String, les entiers i64, les décimaux f64, les booléens bool, et les tableaux Vec<T>. Les objets imbriqués génèrent des structs nommées séparées. Les champs null dans le JSON ou absents dans certains objets de tableau sont typés Option<T>, avec un attribut #[serde(skip_serializing_if = "Option::is_none")] pour les omettre quand ils sont None.
Les noms de champs en Rust utilisent snake_case, alors que JSON utilise souvent camelCase. Le générateur émet #[serde(rename = "originalKey")] sur les champs dont le nom Rust diffère de la clé JSON, et optionnellement #[serde(rename_all = "camelCase")] comme attribut de conteneur.
Ownership, lifetimes et performance
La sortie par défaut utilise des types String possédés pour les champs texte, ce qui signifie que la struct possède toutes ses données et peut être librement déplacée et stockée. Un mode alternatif "emprunté" remplace String par &str (avec un paramètre de lifetime), évitant l'allocation lors de la désérialisation depuis un tampon déjà possédé.
Pour les grands documents JSON, serde_json supporte la désérialisation en streaming via serde_json::Deserializer::from_reader. Les structs générées sont entièrement compatibles avec le streaming car le design basé sur les traits de serde est agnostique à la source de données.
Le pattern matching exhaustif de Rust signifie que l'ajout d'un nouveau champ dans une réponse JSON ne cassera pas silencieusement le code existant. L'attribut #[serde(deny_unknown_fields)] peut être ajouté pour capturer les clés JSON inattendues.
Flux de travail de développement Rust
Les développeurs backend Rust utilisant Axum, Actix-web ou Warp ont besoin de modèles de requête et de réponse typés. Le générateur produit des structs qui fonctionnent directement avec l'extracteur Json<T> d'Axum.
Les outils CLI et scripts de traitement de données en Rust analysent souvent des fichiers de configuration JSON ou des réponses API. Le générateur amorce les définitions de struct pour que vous puissiez vous concentrer sur la logique métier.
Les projets WebAssembly (WASM) qui appellent des API JavaScript reçoivent souvent des données JSON. Les structs serde générées sont compatibles avec wasm-bindgen et serde-wasm-bindgen.