Rust : serde
Serde (en vite fait)
Serde est une librairie Rust que je vois absolument partout. Son objet est la sérialisation et la désérialisation d'objets, que Wikipedia définit comme:
In computing, serialization (or serialisation) is the process of translating a data structure or object state into a format that can be stored (e.g. files in secondary storage devices, data buffers in primary storage devices) or transmitted (e.g. data streams over computer networks) and reconstructed later (possibly in a different computer environment).
En gros, cela nous permet de stocker nos structs dans un tas de formats (yaml, json, toml, et plein d'autre format à 4 lettres) et vice-versa. L'exemple donné sur la page d'accueil est assez parlant, et j'ai rapidement pu l'appliquer pour tester à mon propre code. Je commence par importer les dépendances, attention à activer les bonnes features:
serde = { version = "1.0.152", features = ["derive"] } serde_json = "1.0.93" serde_yaml = "0.9.17"
Dans le code de mon shell Sqish, j'ai notamment le struct suivant qui sert à stocker la configuration du shell:
<source lang="rust"> use serde::{Serialize, Deserialize};
- [derive(Debug, Serialize, Deserialize)]
pub struct SqishConf {
pub promptline: String, pub promptline_base: String, pub aliases: HashMap<String, String>, pub hotkeys: HashMap<String, String>, pub init: String,
} </source>
On peut voir que je lui ai rajouté les dérivations Serialize et Deserialize en plus de Debug : ces traits viennent de serde.
Une fois que j'ai créé une instance de ce Struct, je peux le sérialiser en autre chose: <src lang="rust"> //Créer une instance... let mut out_conf = SqishConf {
promptline: out_str.clone(), promptline_base: out_str, aliases: aliases, hotkeys: hotkeys, init: startup,
};
//Sérialisation et affichage let conf_json = serde_json::to_string(&out_conf).unwrap(); let conf_yaml = serde_yaml::to_string(&out_conf).unwrap(); dbg!(conf_json); println!("{:?}", conf_yaml); </src>
Et en principe, je pourrais stocker ces variables dans un fichier pour les récupérer par la suite dans un struct SqishConf.