Expand description
Boilerplate free initialization of structs from environment variables
Usage example: It is usual that programs rely on environment variables to define their behavior, especially for cloud and microservies applications. Imagine you need to setup a database connection by reading the following environment variables:
- DB_HOST
- DB_PORT
- DB_USER
- DB_PASSWORD
- DB_NAME
With this library crate, it is as easy as this:
use envconf::{Setting, Error};
#[derive(Setting)]
struct DBSettings {
#[conf(env = "DB_HOST", default = "localhost")]
host: String,
#[conf(env = "DB_PORT", default = 5432)]
port: usize,
#[conf(default = "myuser")] // hardcoded setting
user: String,
#[conf(env = "DB_PASSWORD")] // env variable required
password: String,
#[conf(env = "DB_NAME", default = "mydb")]
name: String,
}
fn main() -> Result<(), Error<'static>> {
// This env is mandatory, so it needs to be set!
std::env::set_var("DB_PASSWORD", "secret");
// Initialize config from environment variables
// Read the crate docs to check the possible Error variants
let db_settings = DBSettings::init()?;
assert_eq!(db_settings.host, "localhost");
assert_eq!(db_settings.port, 5432);
assert_eq!(db_settings.user, "myuser");
assert_eq!(db_settings.password, "secret");
assert_eq!(db_settings.name, "mydb");
Ok(())
}
Enums§
- Possible errors returned by the
init
method