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 配置

Download history 853/week @ 2024-03-14 1117/week @ 2024-03-21 792/week @ 2024-03-28 1003/week @ 2024-04-04 644/week @ 2024-04-11 970/week @ 2024-04-18 759/week @ 2024-04-25 437/week @ 2024-05-02 816/week @ 2024-05-09 1036/week @ 2024-05-16 884/week @ 2024-05-23 813/week @ 2024-05-30 1079/week @ 2024-06-06 852/week @ 2024-06-13 1061/week @ 2024-06-20 598/week @ 2024-06-27

每月3,721次下载
12 个crate中使用 (通过 twelf)

MIT 协议

24KB
374

Twelf

Rust Rust Version Docs.rs

Twelf 是一个Rust配置解决方案,包括12-Factor支持。它通过使用进程宏 twelf::config 设计得非常简单,以便配置不同的源和格式来构建您的配置。

目前它支持

  • 默认设置(在您的代码库中,使用 #[serde(default = ...)] 来自 serde
  • TOMLYAMLJSONDHALLINI 文件中读取
  • 在配置文件中扩展环境变量,例如使用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 支持包特性,如果您只想支持 jsonenvtoml,则只需将以下内容添加到您的 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