#configuration #yaml-config #env-var #layer #config-file #load #variables

配置完成

用于从定义良好的层中加载配置到任何可以被 Serde 反序列化的类型的实用工具

8 个版本 (5 个重大更新)

0.7.1 2023 年 11 月 5 日
0.7.0 2023 年 11 月 5 日
0.6.2 2023 年 10 月 19 日
0.5.0 2022 年 10 月 12 日
0.2.0 2022 年 6 月 8 日

#1164解析器实现

Download history 262/week @ 2024-04-21 282/week @ 2024-04-28 273/week @ 2024-05-05 270/week @ 2024-05-12 223/week @ 2024-05-19 50/week @ 2024-05-26 80/week @ 2024-06-02 123/week @ 2024-06-09 161/week @ 2024-06-16 133/week @ 2024-06-23 135/week @ 2024-06-30 131/week @ 2024-07-07 161/week @ 2024-07-14 189/week @ 2024-07-21 197/week @ 2024-07-28 105/week @ 2024-08-04

662 每月下载量

自定义许可

11KB
99

Configured

Crates.io license build

具有偏见的实用工具,用于从定义良好的层中加载配置到任何可以使用 kebab-case 反序列化的类型 Serde

首先,加载位于 <CONFIG_DIR>/default.yaml 的强制默认配置文件中的值。

然后,如果定义了环境变量 CONFIG_OVERLAYS,则从左到右按逗号分隔的覆盖(例如“prod”或“feat, dev”)加载位于 <CONFIG_DIR>/<overlay>.yaml 的覆盖,即添加或覆盖已存在的值。

最后,使用以 <CONFIG_ENV_PREFIX>__ 前缀和由 __(双下划线用作段分隔符,以便在段名称中使用单个下划线)分隔的段作为最终覆盖。

示例

#[derive(Debug, Deserialize)]
#[serde(rename_all = "kebab-case")]
struct Config {
    foo: Foo,
    qux: Qux,
}

#[derive(Debug, Deserialize)]
#[serde(rename_all = "kebab-case")]
struct Foo {
    bar: String,
    baz: String,
}

#[derive(Debug, Deserialize)]
#[serde(rename_all = "kebab-case")]
struct Qux {
    quux: String,
    corge_grault: String,
}

#[test]
fn test_load() -> Result<(), Error> {
    env::set_var(CONFIG_DIR, "test-config");
    env::set_var(CONFIG_OVERLAYS, "feat, dev");
    env::set_var("APP__QUX__CORGE_GRAULT", "corge-grault-env");

    let config = Config::load()?;

    assert_eq!(config.foo.bar.as_str(), "bar");
    assert_eq!(config.foo.baz.as_str(), "baz-dev");
    assert_eq!(config.qux.quux.as_str(), "quux-feat");
    assert_eq!(config.qux.corge_grault.as_str(), "corge-grault-env");

    Ok(())
}

归属

此实用工具基于出色的 Config 库。

许可

此代码是开源软件,根据 Apache 2.0 许可证 许可。

依赖关系

~2.1–3MB
~63K SLoC