← Tous les outils Code Gen

Générateur de structs Rust depuis JSON

Collez du JSON et obtenez des structs Rust idiomatiques avec des derives serde prêtes pour la production.

0 car.

100% côté client

Toute la conversion s'exécute dans votre navigateur. Vos données ne sont jamais envoyées à un serveur.

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.

FAQ

Mes données sont-elles envoyées à un serveur ?

Non. Tout le traitement s'effectue entièrement dans votre navigateur. Votre JSON ne quitte jamais votre appareil.

Quelles dépendances Cargo dois-je ajouter ?

Ajoutez serde = { version = "1", features = ["derive"] } et serde_json = "1" à votre Cargo.toml. Le code généré n'importe que ces deux crates.

Comment les mots réservés Rust sont-ils gérés comme noms de champs ?

Les mots réservés Rust comme "type", "match", "use" et "ref" sont préfixés avec r# (syntaxe d'identifiant brut, ex. r#type) et un attribut #[serde(rename = "type")] préserve la clé JSON originale.

Puis-je générer des enums pour les types union de chaînes ?

Le générateur de base produit des structs. Pour les champs JSON qui agissent comme des enums discriminés, vous pouvez manuellement remplacer le champ String par un enum Rust avec #[derive(Deserialize)].

Les structures profondément imbriquées sont-elles supportées ?

Oui. Chaque objet JSON imbriqué devient sa propre struct nommée. Toutes les structs sont émises dans un seul fichier en ordre de dépendance.

Outils similaires