#env-var #environment #configuration #extracting

nb-from-env

从环境变量构造结构化配置的便捷方式

4个版本

0.2.1 2023年10月20日
0.2.0 2023年9月24日
0.1.1 2023年9月24日
0.1.0 2023年9月24日

#257 in 配置

每月 28 次下载

MIT 许可证

15KB
274

这是一个辅助库,旨在使从环境变量中提取值变得简单。

如何导入

将以下行添加到您的项目中的cargo.toml文件

nb-from-env = "*"

用法

use nb_from_env::{FromEnv, FromEnvDerive}


#[derive(FromEnvDerive)]
struct MyServerConfig {
    log_level: Option<String>,
    listen_address: String,
    max_conns: i32,
    is_debug: bool,
}

fn main() {
    dotenv::dotenv().ok();
    let config = MyServerConfig::from_env();
    ...
}

支持数据类型

几乎支持Rust中的所有原始类型,包括

  • String
  • i8
  • i16
  • i32
  • i64
  • i128
  • u8
  • u16
  • u32
  • u64
  • u128
  • usize
  • isize
  • bool
  • f32
  • f64
  • Option<T: FromEnv>

您也可以为您的类型实现FromEnv

环境变量名称

如果未指定,则所有环境变量名称为字段名的首字母大写


#[derive(FromEnvDerive)]
struct MyConfig {
    my_var: String  // this will search for MY_VAR in environment varialbes
}

但是,您可以使用#[env_var]标签来指定与字段相关的环境变量


#[derive(FromEnvDerive)]
struct MyConfig {
    #[env_var(THE_REAL_NAME)] // this will search for THE_REAL_NAME in environment variables
    my_var: String
}

默认值

您可以通过#[env_default]标签为不存在的环境变量指定默认值

struct MyConfig {
    #[env_default("my default value")] // if MY_VAR not exists, "my default value" will assign to my_var
    my_var: String
}

请注意,默认值的类型必须是字符串,值将在from_env函数中转换为相应的类型

可选类型字段

当您期望的环境变量不存在时,如果相应的字段不是可选的(即Option<T>),则from_env会panic。如果环境变量不存在,可选字段将为None

依赖关系

~265–710KB
~17K SLoC