#env-var #environment #variables #settings #env #configuration

envconf

结构体从环境变量中无样板初始化

2个版本

0.1.1 2020年11月8日
0.1.0 2020年11月8日

#772 in 配置

MIT/Apache

10KB
88 代码行

envconf

Rust Crates Docs License

结构体从环境变量中无样板初始化

用法

程序通常依赖于环境变量来定义其行为,尤其是对于云计算和微服务应用。想象你需要通过以下环境变量设置数据库连接

  • DB_HOST
  • DB_PORT
  • DB_USER
  • DB_PASSWORD
  • DB_NAME

使用这个库crates,就像这样简单

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(())
}

贡献

如果你发现了一个漏洞、错误或想要添加新功能,请创建一个新的问题

为了将你的更改引入代码库,提交一个Pull Request。

非常感谢!

许可证

envconf根据MIT许可证和Apache许可证(版本2.0)的条款分发。

请参阅LICENSE-APACHELICENSE-MIT,以及COPYRIGHT以获取详细信息。

依赖关系

~1.5MB
~35K SLoC