Configuration des applications Rust : bibliothèques config, envy et dotenvy

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

Configuration des applications Rust : bibliothèques config, envy et dotenvy



Lors du développement d'applications en Rust, la gestion de la configuration est l'une des tâches clés. La flexibilité, la sécurité et la facilité de déploiement dépendent de la bonne approche de chargement des paramètres. Dans l'écosystème Rust, il existe plusieurs solutions matures qui permettent de lire la configuration à partir de fichiers, de variables d'environnement et d'autres sources. Dans cet article, nous examinerons trois outils populaires : config, envy et dotenvy.



1. Bibliothèque config — gestionnaire de configuration universel



config est une bibliothèque puissante pour charger des configurations hiérarchiques. Elle prend en charge plusieurs formats (JSON, TOML, YAML, HJSON, INI), ainsi que les variables d'environnement et les sources distantes. L'idée principale est de combiner toutes les sources en une seule arborescence de paramètres.



Installation

[dependencies]config = "0.14"serde = { version = "1.0", features = ["derive"] }


Exemple d'utilisation

use config::{Config, File, Environment};use serde::Deserialize;

#[derive(Debug, Deserialize)]struct AppConfig { server: ServerConfig, database: DatabaseConfig,}

#[derive(Debug, Deserialize)]struct ServerConfig { host: String, port: u16,}

#[derive(Debug, Deserialize)]struct DatabaseConfig { url: String, pool_size: u32,}

fn load_config() -> Result<AppConfig, config::ConfigError> { let cfg = Config::builder() .add_source(File::with_name("config/default")) // Paramètres de base .add_source(File::with_name("config/local").required(false)) // Surcharges locales .add_source(Environment::with_prefix("APP")) // Variables d'environnement avec préfixe APP_ .build()?;

cfg.try_deserialize()}

fn main() { match load_config() { Ok(config) => println!("Configuration chargée : {:?}", config), Err(e) => eprintln!("Erreur de configuration : {}", e), }}


La bibliothèque fusionne automatiquement les sources : les valeurs des sources suivantes écrasent les précédentes. Cela permet d'organiser facilement une hiérarchie : default → environment → local override.



2. Bibliothèque envy — configuration à partir de variables d'environnement



envy est une bibliothèque minimaliste qui charge la configuration exclusivement à partir de variables d'environnement. Idéale pour les applications 12-factor, où les paramètres doivent être séparés du code.



Installation

[dependencies]envy = "0.4"serde = { version = "1.0", features = ["derive"] }


Exemple d'utilisation

use serde::Deserialize;

#[derive(Debug, Deserialize)]struct AppConfig { #[serde(rename = "SERVER_HOST")] host: String, #[serde(rename = "SERVER_PORT")] port: u16, #[serde(rename = "DATABASE_URL")] db_url: String,}

fn load_config() -> Result<AppConfig, envy::Error> { envy::from_env::<AppConfig>()}

fn main() { match load_config() { Ok(config) => println!("Configuration env : {:?}", config), Err(e) => eprintln!("Erreur Envy : {}", e), }}


Pour l'utiliser, il suffit de définir les variables d'environnement :

export SERVER_HOST=127.0.0.1export SERVER_PORT=8080export DATABASE_URL=postgres://user:pass@localhost/db


envy prend en charge les structures imbriquées via des séparateurs (par exemple, DATABASE__HOST), ainsi que les champs optionnels avec une valeur par défaut.



3. Bibliothèque dotenvy — chargement de fichiers .env



dotenvy est un fork de la bibliothèque populaire dotenv, conçu pour charger les variables d'environnement à partir de fichiers .env. Particulièrement utile en développement, lorsqu'il faut définir rapidement des paramètres locaux.



Installation

[dependencies]dotenvy = "0.15"<                    

Recommendations