#dotenv #env #environment #settings

dotenv_config_ext

env 解析为 Rust 的配置结构体

1 个不稳定版本

0.1.3 2022年11月1日

#852配置

每月 29 次下载

MIT 许可证

17KB
250

zinclabs/dotenv-config

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