Fiche technique | |
---|---|
Type de produit : | Cadre d'application |
Langage de programmation : | Rust |
Auteur : | Communauté |
Licence : | Apache 2.0/MIT |
Date de publication : | 2017 à maintenant |
Site Web : | https://serde.rs/ |
Introduction
Le Serde est un cadre d'application permettant de sérialiser et de désérialiser les structures de données Rust de manière efficace et générique.
L'écosystème Serde se compose de structures de données capables de se sérialiser et de se désérialiser elles-mêmes, ainsi que de formats de données capables de sérialiser et de désérialiser d'autres éléments. Serde fournit la couche par laquelle ces deux groupes interagissent, permettant à toute structure de données prise en charge d'être sérialisée et désérialisée dans n'importe quel format de données pris en charge.
Conception
Là où de nombreux autres langages s'appuient sur la réflexion à l'exécution pour sérialiser les données, Serde s'appuie sur le puissant système de traits de Rust. Une structure de données capable de se sérialiser et de se désérialiser elle-même implémente les traits Serialize et Deserialize de Serde (ou utilise l'attribut derive de Serde pour générer automatiquement des implémentations à la compilation). Cela évite toute surcharge liée à la réflexion ou aux informations de type à l'exécution. En fait, dans de nombreuses situations, l'interaction entre la structure et le format des données peut être entièrement optimisée par le compilateur Rust, permettant à la sérialisation Serde d'être aussi rapide qu'un sérialiseur manuscrit pour la sélection spécifique de la structure et du format des données.
Formats de données
Voici une liste partielle des formats de données implémentés pour Serde par la communauté :
- JSON, la notation d'objet JavaScript omniprésente utilisée par de nombreuses API HTTP.
- Postcard, un format binaire compact, compatible avec les systèmes embarqués et sans std.
- CBOR, une représentation d'objet binaire concise conçue pour les messages de petite taille, sans négociation de version.
- YAML, un langage de configuration convivial, qui n'est pas un langage de balisage.
- MessagePack, un format binaire efficace qui ressemble à un JSON compact.
- TOML, un format de configuration minimal utilisé par Cargo.
- Pickle, un format courant dans l'univers Python.
- RON, une notation d'objet Rusty.
- BSON, le format de stockage de données et de transfert réseau utilisé par MongoDB.
- Avro, un format binaire utilisé dans Apache Hadoop, avec prise en charge de la définition de schémas.
- JSON5, un sur-ensemble de JSON incluant certaines productions d'ES5.
- Chaînes de requête d'URL, au format x-www-form-urlencoded.
- Starlark, le format utilisé pour décrire les cibles de build par les systèmes de build Bazel et Buck (sérialisation uniquement).
- Envy, un moyen de désérialiser les variables d'environnement en structures Rust (désérialisation uniquement).
- Envy Store, un moyen de désérialiser les paramètres AWS Parameter Store en structures Rust (désérialisation uniquement).
- S-expressions, la représentation textuelle du code et des données utilisée par la famille de langages Lisp.
- Format de câblage binaire de D-Bus.
- FlexBuffers, le cousin sans schéma du format de sérialisation zéro copie FlatBuffers de Google.
- Bencode, un format binaire simple utilisé dans le protocole BitTorrent.
- Flux de jetons, pour le traitement des entrées de macros procédurales Rust (désérialisation uniquement).
- Éléments DynamoDB, le format utilisé par rusoto_dynamodb pour transférer des données vers et depuis DynamoDB.
- Hjson, une extension syntaxique de JSON conçue pour la lecture et l'édition humaines. (désérialisation uniquement)
- CSV (valeurs séparées par des virgules) est un format de fichier texte tabulaire.
Structures de données
Prêt à l'emploi, Serde est capable de sérialiser et de désérialiser les types de données Rust courants dans tous les formats mentionnés ci-dessus. Par exemple, String, &str, usize, Vec<T> et HashMap<K,V> sont tous pris en charge. De plus, Serde fournit une macro derive pour générer des implémentations de sérialisation pour les structures de votre programme. L'utilisation de la macro derive se déroule comme suit :
- use serde::{Serialize, Deserialize};
-
- #[derive(Serialize, Deserialize, Debug)]
- struct Point {
- x: i32,
- y: i32,
- }
-
- fn main() {
- let point = Point { x: 1, y: 2 };
-
- // Convertissez le point en une chaîne de caractères JSON.
- let serialized = serde_json::to_string(&point).unwrap();
-
- // Affichages sérialisées = {"x":1,"y":2}
- println!("sérialiser = {}", serialized);
-
- // Convertir la chaîne de caractères JSON en point.
- let deserialized: Point = serde_json::from_str(&serialized).unwrap();
-
- // Affichages désérialisées = Point { x: 1, y: 2 }
- println!("desérialisé = {:?}", deserialized);
- }