24 个版本 (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.2 | 2020年11月11日 |
#19 in 配置
每月3,861次下载
在 11 个 Crates 中使用 (5 个直接使用)
69KB
1.5K SLoC
Twelf
Twelf 是一个为 Rust 提供配置解决方案的工具,包括对 12-Factor 的支持。它设计有
Layer
层次结构,以便配置不同的来源和格式来构建您的配置。主要目标是使用 proc 宏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 支持crate功能,如果你想只支持 json
,env
和 toml
,你只需将此添加到你的 Cargo.toml
twelf = { version = "0.11", default-features = false, features = ["json", "toml", "env"] }
default_trait
启用与 std::default::Default trait 集成的字段的代码层。
custom_fn
启用允许执行自定义闭包的代码层。
默认功能是 ["env", "clap", "shellexpand"]
贡献
请自由地为 twelf
项目做出贡献。
在测试 crate 的更改时启用所有功能
cargo test --all-features
替代方案
- config-rs 几乎做的是同样的事情,除了环境层(例如,我们支持环境变量中的哈希表和数组)。此外,
config-rs
没有clap支持,如果你不是非常喜欢proc-macros,它也没有使用任何proc-macros。
依赖关系
~0.9–10MB
~104K SLoC