Crates.io | dotenv_config_ext |
lib.rs | dotenv_config_ext |
version | 0.1.3 |
source | src |
created_at | 2022-11-01 17:18:57.922567 |
updated_at | 2022-11-01 17:18:57.922567 |
description | parse `env` to config struct for Rust |
homepage | https://github.com/sombralibre/dotenv-config |
repository | https://github.com/sombralibre/dotenv-config |
max_upload_size | |
id | 702948 |
size | 27,026 |
use .env
as config file and parse environments to config struct.
use dotenv::dotenv;
use dotenv_config::EnvConfig;
#[derive(Debug, EnvConfig)]
struct Config {
#[env_config(default = "192.168.2.1")]
server_addr: String,
server_mode: bool,
#[env_config(name = "ZINC_FOO", default = true)]
foo: bool,
#[env_config(name = "ZINC_BAR", default = 123456)]
bar: Option<i64>,
}
fn main() {
dotenv().ok();
let cfg = Config::init().unwrap();
println!("{:#?}", cfg);
}
you can use macro attribute set field attribute
.env
file config it.ZINC_FOO=false
ZINC_BAR=8787878
default load environment key is: structName_fieldName
do UpperSnake, like above struct, default config key is:
CONFIG_SERVER_ADDR
CONFIG_SERVER_MODE
ZINC_FOO
ZINC_BAR
Allows the usage of external function to post-process the field value once it get parsed.
For example we can pass an environment variable with an aws ARN for a secret manager, so once the value of the arn
has been parsed, the added function specified in ext_post_with
will retrieve the value from aws.
use dotenv::dotenv;
use dotenv_config::EnvConfig;
fn ssm_client(s: String) -> Result<String, ()>{
Ok(s)
}
#[derive(Debug, EnvConfig)]
struct Config {
#[env_config(default = "192.168.2.1", ext=true, ext_post_with="ssm_client")]
server_addr: String,
server_mode: bool,
#[env_config(name = "ZINC_FOO", default = true)]
foo: bool,
#[env_config(name = "ZINC_BAR", default = 123456)]
bar: Option<i64>,
}
#[tokio::main]
async fn main() {
dotenv().ok();
let cfg = Config::init().await.unwrap();
println!("{:#?}", cfg);
}
ext: bool
enable or disable feature.
ext_post_with: String
required if ext
is true.
The attribute ext_post_with
receive a function name as a string, the function passed must have the following signature:
async fn func(_: String) -> Result<String, E>;