Build a config structure from environment variables in Rust without boilerplate.
Let's say you application relies on the following environment variables:
DB_HOST
DB_PORT
And you want to initialize Config
structure like this one:
struct Config {
host: String,
port: u16,
}
You can achieve this with the following code without boilerplate:
#[macro_use]
extern crate envconfig_derive;
extern crate envconfig;
use envconfig::Envconfig;
#[derive(Envconfig)]
pub struct Config {
#[envconfig(from = "DB_HOST")]
pub db_host: String,
#[envconfig(from = "DB_PORT", default = "5432")]
pub db_port: u16,
}
fn main() {
// Assuming the following environment variables are set
std::env::set_var("DB_HOST", "127.0.0.1");
// Initialize config from environment variables or terminate the process.
let config = Config::init().unwrap();
assert_eq!(config.db_host, "127.0.0.1");
assert_eq!(config.db_port, 5432);
}
Tests do some manipulation with environment variables, so to prevent flaky tests they have to be executed in a single thread:
cargo test -- --test-threads=1
- - migrate to the latest versions of
syn
andquote
- - support
Option<T>
(issue) - - support
default
attribute (issue) - - support nested structures?
- greyblake Potapov Sergey - creator, maintainer.