#环境变量 #命令行参数 #配置 #环境 #命令参数 #参数 #命令

confu

通过环境或参数进行无装饰的应用配置

4个版本

0.1.3 2021年5月20日
0.1.2 2021年5月17日
0.1.1 2021年5月16日
0.1.0 2021年5月15日

配置分类中排名455

每月下载42

MIT/Apache

9KB

Confu

为Rust编写的软件提供通过环境命令行参数进行无装饰的应用配置。

为什么选择Confu?面向微服务,直接依赖项列表最少: synquoteproc-macro2proc-macro-error

如果希望有更友好的命令行解析,有许多优秀且经过验证的crate替代品。例如,Clap 👏。

特性

  • 在编译时(当为您的应用生成二进制文件时),捕获
    • 构建类型,例如debugrelease
    • 构建版本,如果通过环境变量PREFIX]VERSION提供,否则设置为<未指定>
  • 从以下之一读取配置
    • 环境
    • 命令行参数
    • 默认值
  • 配置项可以有可选的前缀,如APP_
  • 每个配置项可以是
    • 必需的 - 如果未提供,将引发panic
    • 受保护的 - 将显示 "xxxxxxx" 而不是敏感信息
    • 隐藏的 - 完全不显示
  • 具体性:默认值 -> 环境 -> 参数。参数是最具体的,如果也定义了相应的环境值,则将优先于该环境值

用法/示例

在仓库中提供了一个示例。以下也是快速使用摘要

Cargo.toml

[dependencies]
confu = "*"

然后,以下代码

use confu::Confu;

#[derive(Confu)]
#[confu_prefix = "APP_"]
struct Config {
    #[default = "postgres"]
    db_user: String,

    #[protect]
    #[default = "postgres"]
    db_password: String,

    #[default = "127.0.0.1"]
    api_host: String,

    #[require]
    telemetry: String,

    #[hide]
    super_secret_stuff: String,
}

fn main() {
    let config = Config::confu();
    config.show();
}

应该产生类似的结果,前提是设置了环境变量APP_VERSION="0.1.0"

$ cargo run --quiet -- --app_telemetry=yes
  build: debug
version: 0.1.0

APP_DB_USER/--app_db_user=postgres  (default: "postgres")
APP_DB_PASSWORD/--app_db_password=xxxxxxx  (default: "xxxxxxx")
APP_API_HOST/--app_api_host=127.0.0.1  (default: "127.0.0.1")
APP_TELEMETRY/--app_telemetry=yes  (required)

如果省略了必需的参数,将引发panic

$ cargo run --quiet
thread 'main' panicked at 'required argument APP_TELEMETRY/--app_telemetry was not provided.', examples\basic\src\config.rs:4:17
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

通往v0.2.0的道路

  • 编写文档
  • 编写测试
  • 在宏中提供更好的错误报告
  • 解析为数值和bool类型

依赖项

~1.5MB
~36K SLoC