22个版本 (14 个重大更新)
0.15.0 | 2024年3月11日 |
---|---|
0.13.0 | 2023年12月13日 |
0.12.0 | 2023年6月26日 |
0.10.0 | 2023年2月7日 |
0.1.0 | 2020年11月11日 |
#841 in 配置
每月3,721次下载
在 12 个crate中使用 (通过 twelf)
24KB
374 行
Twelf
Twelf 是一个Rust配置解决方案,包括12-Factor支持。它通过使用进程宏
twelf::config
设计得非常简单,以便配置不同的源和格式来构建您的配置。
目前它支持
- 默认设置(在您的代码库中,使用
#[serde(default = ...)]
来自 serde) - 从
TOML
、YAML
、JSON
、DHALL
、INI
文件中读取 - 在配置文件中扩展环境变量,例如使用JSON文件
{"data": ${MY_ENV_VAR:-the_default_value}}
示例 - 执行自定义函数或闭包以通过 serde_json::Value 提供值
- 从环境变量中读取:它支持具有
HashMap
结构的MY_VARIABLE="mykey=myvalue,mykey2=myvalue2"
和类似数组的结构MY_VARIABLE=first,second
,归功于 envy。 - 您可以在您的结构体中使用所有 serde 属性来自定义您想要的配置
- 从您的命令行配置中读取,该配置是用clap构建的(注意:如果您使用的是版本 < v3,请使用
twelf@0.8
版本)
用法
使用 JSON 和环境变量进行简单操作
use twelf::{config, Layer};
#[config]
#[derive(Default)]
struct Conf {
test: String,
another: usize,
}
// Init configuration with layers, each layers override only existing fields
let config = Conf::with_layers(&[
Layer::Json("conf.json".into()),
Layer::Env(Some("PREFIX_".to_string()))
]).unwrap();
带有 clap 支持的示例
use twelf::{config, Layer};
#[config]
struct Conf {
/// Here is an example of documentation which is displayed in clap
test: String,
another: usize,
}
// Will generate global arguments for each of your fields inside your configuration struct
let app = clap::Command::new("test").args(&Conf::clap_args());
// Init configuration with layers, each layers override only existing fields
let config = Conf::with_layers(&[
Layer::Json("conf.json".into()),
Layer::Env(Some("PREFIX_".to_string())),
Layer::Clap(app.get_matches().clone())
]).unwrap();
// ... your application code
更多示例请查看这里。
特性
Twelf 支持包特性,如果您只想支持 json
、env
和 toml
,则只需将以下内容添加到您的 Cargo.toml
twelf = { version = "0.11", default-features = false, features = ["json", "toml", "env"] }
default_trait
启用与 std::default::Default 特性集成的代码层。
custom_fn
启用允许执行自定义闭包的代码层。
默认特性为 ["env", "clap", "shellexpand"]
贡献
欢迎为 twelf
项目做出贡献。
在测试包的更改时启用所有特性
cargo test --all-features
替代方案
- config-rs 几乎做了同样的事情,除了环境层(例如,我们支持环境变量中的 hashmap 和数组)。此外,
config-rs
不支持 clap,并且如果您不是非常喜欢 proc-macros,它也没有使用任何 proc-macros。
依赖关系
~1.5MB
~35K SLoC