Accueil Technologie

Comment travailler avec des fichiers TOML en Rust

Les fichiers de configuration jouent un rôle crucial dans le développement de logiciels et l’administration de systèmes. Ils permettent de personnaliser et d’affiner le comportement des logiciels afin de les adapter à différents environnements et aux préférences des utilisateurs. Il existe de nombreux types de fichiers de configuration, comme YAML et TOML.



TOML (Tom’s Obvious Minimal Language) se distingue comme une option puissante et conviviale parmi de nombreux formats de fichiers de configuration pour sa syntaxe et la façon dont il aborde les lacunes des formats de fichiers de configuration existants pour fournir une alternative plus intuitive et plus directe.


Comprendre le fichier TOML

À la base, le format de fichier TOML exprime des données structurées dans un format lisible par l’homme. TOML se distingue par sa conception minimaliste et intuitive qui suit une structure de paires clé-valeur où chaque clé représente une option de configuration associée à une valeur définissant ses paramètres.

Le format de fichier TOML repose sur des règles syntaxiques simples qui privilégient la lisibilité, ce qui le rend accessible aux humains et aux machines. Une caractéristique notable de TOML est sa prise en charge de divers types de données, notamment les chaînes de caractères, les entiers, les nombres à virgule flottante, les booléens, les tableaux et les tables.

La polyvalence de TOML vous permet d’exprimer facilement des configurations complexes pour répondre à un plus grand nombre de cas d’utilisation. TOML offre de nombreuses caractéristiques et fonctionnalités, ce qui en fait un choix idéal pour la configuration.

  1. Structure intuitive: TOML adopte une structure hiérarchique composée de tables, de paires clé-valeur et de tableaux. L’organisation de TOML permet une représentation claire et logique des paramètres de configuration complexes.
  2. Commentaires et espaces blancs: TOML prend en charge les commentaires en ligne et multilignes, ce qui vous permet d’annoter et de documenter efficacement vos fichiers de configuration. Les espaces blancs sont ignorés principalement pour assurer la lisibilité et réduire les bruits inutiles.
  3. Typage fort: Chaque valeur dans TOML est associée à un type de données spécifique, qu’il s’agisse de chaînes de caractères, d’entiers, de flottants, de booléens ou de dates. L’application du typage fort de TOML aide à maintenir l’intégrité des données pour un traitement sans erreur.
  4. Prise en charge des structures imbriquées: TOML facilite l’imbrication de tableaux dans des tableaux pour une représentation hiérarchique de la configuration. Les structures imbriquées sont utiles lorsqu’il s’agit de paramètres multidimensionnels ou de configurations d’applications complexes.
  5. Support des tableaux et des tables en ligne: TOML fournit des tableaux et des tables en ligne pour une plus grande flexibilité dans l’expression de structures de données redondantes ou compactes.

TOML suit les règles et les conventions qui définissent sa syntaxe et sa structure. Le format repose sur l’indentation et les paires clé-valeur pour représenter les données de configuration.

Voici un exemple de fichier TOML simple pour les configurations :

 [server]
port = 8080
host = "localhost"
debug = false

[database]
name = "mydatabase"
username = "admin"
password = "secretpassword"

Ce fichier TOML comporte deux sections contenant des paires clé-valeur représentant des options de configuration spécifiques. Ici, la section port dans le champ [server] spécifie un numéro de port sur le serveur hôte qui spécifie le nom d’hôte du serveur.


Travailler avec des fichiers TOML en Rust

Rust, un langage qui s’enorgueillit de sa sécurité, de ses performances et de l’expérience de ses développeurs, a choisi les fichiers TOML comme format de configuration en raison de leur intégration transparente à son éthique.

La décision de Rust d’utiliser TOML peut être attribuée à plusieurs facteurs clés. Tout d’abord, TOML établit un équilibre harmonieux entre lisibilité et expressivité. De plus, l’approche minimaliste de TOML garantit qu’il reste exempt de toute complexité inutile, ce qui correspond à la philosophie de conception de Rust.

Il existe de nombreux crates tiers pour travailler avec des fichiers TOML dans l’écosystème Rust, avec le crate toml La caisse est la plus populaire.

La toml crate fournit un support complet pour l’analyse, la manipulation et la sérialisation des données TOML, ce qui en fait un outil indispensable pour gérer les fichiers de configuration et les données structurées dans les applications Rust.

L'image de prévisualisation GitHub du toml crate

Pour travailler avec des paquets tiers en Rust, créez un projet Rust avec Cargo et ajoutez cette directive au fichier dépendances de la section Cargo.toml pour installer et utiliser le fichier toml dans vos projets Rust :

 [dependencies]
toml = "0.5"

Pour la sérialisation et la désérialisation des données TOML, vous aurez besoin de la caisse serde. Le crate toml crate interagit finement avec serde pour le traitement des données.

 [dependencies]
serde = { version = "1.0", features = ["derive"] }
toml = "0.5"

Une fois que vous avez ajouté le toml et serde En utilisant les crates comme dépendances, vous pouvez les importer dans votre code Rust et utiliser leurs fonctionnalités.

 use toml;

Le toml crate peut lire, écrire et analyser des fichiers TOML.


Lire les fichiers TOML avec Rust

Après avoir ajouté l’option toml crate comme dépendance du projet et en important le crate dans votre projet, vous pouvez lire les fichiers TOML dans vos programmes Rust.

Tout d’abord, vous devez ouvrir le fichier TOML avec la fonction intégrée fs crate’s Fichier struct :

 use std::fs::File;
use std::io::Read;

fn main() {
    let mut file = File::open("config.toml").expect("Failed to open file");
    let mut contents = String::new();
    file.read_to_string(&mut contents)
        .expect("Failed to read file");

    // At this point, `contents` contains the content of the TOML file
    println!("{}", contents);
}

Le principal la fonction ouvre un cargo.toml avec le fichier File::open et lit le contenu du fichier dans une chaîne de caractères avec la méthode read_to_string avant d’imprimer le contenu sur la console avec la méthode println ! macro.

Lire le contenu d’un fichier TOML sous forme de chaîne de caractères est utile, mais dans la plupart des cas, vous souhaitez charger les données dans un format plus structuré. Rust nous permet de définir des types struct qui représentent la structure des données de nos fichiers TOML. Vous pouvez maintenant utiliser les types toml crate pour désérialiser automatiquement les données TOML dans ces structures.

Voici comment vous pouvez lire le contenu du fichier Cargo.toml et les imprime sur la console :

 use serde::Deserialize;
use std::fs;

#[derive(Debug, Deserialize)]
struct CargoToml {
    #[allow(dead_code)] // Disable dead code warning for the entire struct
    package: Package,
    #[allow(dead_code)]
    dependencies: Dependencies,
}

#[derive(Debug, Deserialize)]
struct Package {
    #[allow(dead_code)]
    name: String,
    #[allow(dead_code)]
    version: String,
    #[allow(dead_code)]
    edition: String,
}

#[derive(Debug, Deserialize)]
struct Dependencies {
    #[allow(dead_code)]
    serde: SerdeDependency,
    #[allow(dead_code)]
    toml: String,
}

#[derive(Debug, Deserialize)]
struct SerdeDependency {
    #[allow(dead_code)]
    version: String,
    #[allow(dead_code)]
    features: Vec<String>,
}

fn main() {
    let toml_str = fs::read_to_string("Cargo.toml").expect("Failed to read Cargo.toml file");

    let cargo_toml: CargoToml = toml::from_str(&toml_str).expect("Failed to deserialize Cargo.toml");

    println!("{:#?}", cargo_toml);
}

Le fichier CargoToml, Paquet, Dépendanceset SerdeDépendance Les structures représentent la structure du fichier TOML. Les structures sont annotées avec #[allow(dead_code)] attributs pour désactiver les avertissements de code mort pour les structures.

L’attribut principal lit le contenu du fichier Cargo.toml dans le fichier toml_str et la variable from_str méthode de la toml crate lit la chaîne TOML et désérialise son contenu dans le fichier cargo_toml variable.

Voici le résultat de l’exécution de la commande principal fonction :

résultat de l'impression du contenu du fichier Cargo.toml


Ecrire des données dans des fichiers TOML avec Rust

L’écriture de données dans des fichiers TOML est pratique pour générer des fichiers de configuration à partir de vos programmes.

Voici comment sérialiser une structure en TOML et écrire son contenu dans un fichier config.toml dans le répertoire racine de votre projet :

 use std::fs::File;
use std::io::Write;
use serde::Serialize;
use toml::to_string;

#[derive(Serialize)]
struct ServerConfig {
    host: String,
    port: u16,
    timeout: u32,
}

fn write_config_to_file(config: &ServerConfig, file_path: &str) -> Result<(), Box<dyn std::error::Error>> {
    let toml_string = to_string(config)?;
    let mut file = File::create(file_path)?;
    file.write_all(toml_string.as_bytes())?;
    Ok(())
}

fn main() {
    let config = ServerConfig {
        host: "localhost".to_owned(),
        port: 8000,
        timeout: 30,
    };

    if let Err(e) = write_config_to_file(&config, "config.toml") {
        eprintln!("Error: {}", e);
    } else {
        println!("Config file created successfully.");
    }
}

Le fichier write_config_to_file fait référence à une instance de la fonction ServerConfig et le chemin d’accès au fichier config.toml convertit l’instance struct en chaîne de caractères et crée le fichier config.toml dans le chemin d’accès spécifié. Enfin, il écrit la chaîne TOML dans le fichier TOML à l’aide de la commande write_all fonction.

Le principal La fonction « main » initialise un ServerConfig L’objet struct, appelle la fonction write_config_to_file avec les données nécessaires, et imprime un message sur la console en fonction de l’état de l’opération.


Cargo utilise les fichiers TOML pour la gestion des dépendances

Cargo, le gestionnaire de dépendances et l’outil de construction de Rust, utilise des fichiers TOML pour spécifier et gérer les dépendances.

Lorsque vous créez un nouveau projet Rust avec Cargo, il génère un fichier Cargo.toml dans le répertoire racine de votre projet qui sert de manifeste pour votre projet. Vous pouvez y déclarer les métadonnées, les dépendances, les configurations de construction et d’autres paramètres de votre projet.

Leave your vote

0 0 votes
Évaluation de l'article
S’abonner
Notification pour
guest
0 Commentaires
Commentaires en ligne
Afficher tous les commentaires

Log In

Forgot password?

Don't have an account? Register

Forgot password?

Enter your account data and we will send you a link to reset your password.

Your password reset link appears to be invalid or expired.

Log in

Privacy Policy

Add to Collection

No Collections

Here you'll find all collections you've created before.

0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x

Newsletter

inscrivez vous pour recevoir nos actualités

Actualités, astuces, bons plans et cadeaux !