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 在 解析器实现
662 每月下载量
11KB
99 行
Configured
具有偏见的实用工具,用于从定义良好的层中加载配置到任何可以使用 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