Serde pour Rust : guide complet avec exemples

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Qu'est-ce que Serde et pourquoi en a-t-on besoin

\n\n

Serde (abréviation de Serialization/Deserialization) est un framework de sérialisation et désérialisation de structures de données en langage Rust. C'est le standard de facto pour travailler avec les formats de données dans l'écosystème Rust. La bibliothèque permet de convertir des types Rust complexes (structures, énumérations, vecteurs, tables de hachage) en divers formats textuels et binaires (JSON, YAML, TOML, BSON, MessagePack, CBOR, et bien d'autres) et vice versa.

\n\n

La philosophie principale de Serde est la performance sans compromis. Elle utilise le puissant système de macros de Rust pour générer du code hautement optimisé au moment de la compilation, ce qui en fait l'une des bibliothèques de sérialisation les plus rapides parmi tous les langages de programmation. Serde n'est liée à aucun format spécifique : elle fournit les traits abstraits Serialize et Deserialize, tandis que les formats concrets sont implémentés dans des crates séparés (par exemple, serde_json, serde_yaml).

\n\n

Pourquoi utiliser Serde ?

\n
    \n
  • Sauvegarde d'état : écriture de configurations, sauvegardes de jeux, cache sur disque
  • \n
  • Protocoles réseau : échange de données entre client et serveur (REST API, WebSocket)
  • \n
  • Fichiers de configuration : lecture de paramètres depuis JSON/YAML/TOML
  • \n
  • Bases de données : sérialisation d'enregistrements pour stockage dans Redis, MongoDB et autres bases de données
  • \n
  • Communication inter-processus : transfert de données entre processus via pipe ou sockets
  • \n
\n\n

Installation

\n\n

Serde s'installe via le gestionnaire de paquets Cargo, intégré à Rust. Pour commencer, ajoutez les dépendances dans le fichier Cargo.toml :

\n\n
[dependencies]\nserde = { version = "1.0", features = ["derive"] }\nserde_json = "1.0"
\n\n

Explication des dépendances :

\n
    \n
  • serde — le cœur de la bibliothèque avec les traits Serialize et Deserialize. Le flag features = ["derive"] active le support de la macro #[derive(Serialize, Deserialize)].
  • \n
  • serde_json — l'implémentation du format JSON. De même, on peut ajouter serde_yaml, serde_toml, bincode et autres.
  • \n
\n\n

Si vous travaillez avec Rust 2021 edition ou une version plus récente, il suffit d'ajouter ces lignes. Pour installer une version spécifique, indiquez le numéro, par exemple serde_json = "1.0.128".

\n\n

Démarrage rapide : premier exemple

\n\n

Créons une structure simple, sérialisons-la en JSON, puis désérialisons-la :

\n\n
use serde::{Deserialize, Serialize};\nuse serde_json;\n\n// Structure avec génération automatique du code de sérialisation/désérialisation\n#[derive(Serialize, Deserialize, Debug)]\nstruct User {\n    id: u32,\n    name: String,\n    email: String,\n    active: bool,\n}\n\nfn main() {\n    // Création d'une instance de la structure\n    let user = User {\n        id: 42,\n        name: "Alice".to_string(),\n        email: "alice@example.com".to_string(),\n        active: true,\n    };\n\n    // Sérialisation en chaîne JSON\n    let json_string = serde_json::to_string(&user).unwrap();\n    println!("JSON sérialisé : {}", json_string);\n\n    // Désérialisation en structure\n    let deserialized_user: User = serde_json::from_str(&json_string).unwrap();\n    println!("Structure désérialisée : {:?}", deserialized_user);\n\n    // Vérification que les données n'ont pas été perdues\n    assert_eq!(user.id, deserialized_user.id);\n    assert_eq!(user.name, deserialized_user.name);\n}\n
\n\n

Sortie du programme :

\n
JSON sérialisé : {"id":42,"name":"Alice","email":"alice@example.com","active":true}\nStructure désérialisée : User { id: 4                    

Recommendations