Configuração de aplicações Rust: bibliotecas config, envy e dotenvy

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Configuração de aplicações Rust: bibliotecas config, envy e dotenvy



No desenvolvimento de aplicações em Rust, o gerenciamento de configuração é uma das tarefas principais. A flexibilidade, segurança e facilidade de implantação dependem de uma abordagem correta para carregar as definições. No ecossistema Rust, existem várias soluções maduras que permitem ler configurações de arquivos, variáveis de ambiente e outras fontes. Neste artigo, vamos explorar três ferramentas populares: config, envy e dotenvy.



1. Biblioteca config — gerenciador de configuração universal



config é uma biblioteca poderosa para carregar configurações hierárquicas. Ela suporta vários formatos (JSON, TOML, YAML, HJSON, INI), além de variáveis de ambiente e fontes remotas. A ideia principal é combinar todas as fontes em uma única árvore de definições.



Instalação

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


Exemplo de uso

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")) // Definições base .add_source(File::with_name("config/local").required(false)) // Sobrescritas locais .add_source(Environment::with_prefix("APP")) // Variáveis de ambiente com prefixo APP_ .build()?;

cfg.try_deserialize()}

fn main() { match load_config() { Ok(config) => println!("Configuração carregada: {:?}", config), Err(e) => eprintln!("Erro de configuração: {}", e), }}


A biblioteca combina automaticamente as fontes: valores de fontes posteriores sobrescrevem os anteriores. Isso permite organizar facilmente uma hierarquia: default → environment → local override.



2. Biblioteca envy — configuração a partir de variáveis de ambiente



envy é uma biblioteca minimalista que carrega configurações exclusivamente de variáveis de ambiente. Ideal para aplicações 12-factor, onde as definições devem ser separadas do código.



Instalação

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


Exemplo de uso

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!("Configuração de env: {:?}", config), Err(e) => eprintln!("Erro no envy: {}", e), }}


Para funcionar, basta definir as variáveis de ambiente:

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


envy suporta estruturas aninhadas através de separadores (por exemplo, DATABASE__HOST), além de campos opcionais com valor padrão.



3. Biblioteca dotenvy — carregamento de arquivos .env



dotenvy é um fork da popular biblioteca dotenv, projetado para carregar variáveis de ambiente a partir de arquivos .env. Particularmente útil durante o desenvolvimento, quando é necessário definir rapidamente definições locais.



Instalação

[dependencies]dotenvy = "0.15"<                    

Recommendations