Qu'est-ce que Serde et pourquoi en a-t-on besoin
\n\nSerde (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\nLa 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).
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
Installation
\n\nSerde s'installe via le gestionnaire de paquets Cargo, intégré à Rust. Pour commencer, ajoutez les dépendances dans le fichier Cargo.toml :
[dependencies]\nserde = { version = "1.0", features = ["derive"] }\nserde_json = "1.0"\n\nExplication des dépendances :
\n- \n
serde— le cœur de la bibliothèque avec les traitsSerializeetDeserialize. Le flagfeatures = ["derive"]active le support de la macro#[derive(Serialize, Deserialize)]. \n serde_json— l'implémentation du format JSON. De même, on peut ajouterserde_yaml,serde_toml,bincodeet autres. \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".
Démarrage rapide : premier exemple
\n\nCréons une structure simple, sérialisons-la en JSON, puis désérialisons-la :
\n\nuse 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\nSortie du programme :
\nJSON sérialisé : {"id":42,"name":"Alice","email":"alice@example.com","active":true}\nStructure désérialisée : User { id: 4