1 个不稳定版本
0.1.3 | 2022年11月1日 |
---|
#852 在 配置
每月 29 次下载
17KB
250 行
从
Dot Env Config
使用 .env
作为配置文件,并将环境变量解析为配置结构体。
用法
派生 EnvConfig
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);
}
env_config 属性
您可以使用宏属性设置字段属性
- name: 更改默认环境键
- default: 如果未设置,则用作默认值
您可以通过系统环境或 .env
文件进行配置。
ZINC_FOO=false
ZINC_BAR=8787878
默认加载环境键为:structName_fieldName
,采用 UpperSnake 格式,如上面的结构体,默认配置键是
CONFIG_SERVER_ADDR
CONFIG_SERVER_MODE
ZINC_FOO
ZINC_BAR
新增功能
允许使用外部函数在解析字段值后进行后处理。
例如,我们可以传递一个包含 aws ARN 的环境变量给秘密管理器,一旦 arn 的值被解析,ext_post_with
中指定的添加函数将检索 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
启用或禁用功能。
ext_post_with: String
如果 ext
为 true,则必需。
属性 ext_post_with
接收一个函数名作为字符串,传递的函数必须具有以下签名
async fn func(_: String) -> Result<String, E>;
依赖项
~4MB
~78K SLoC