#configuration #environment #env #settings #format #source

twelf

Twelf 是一个为 Rust 提供配置解决方案的工具,包括对 12-Factor 的支持。它设计有层次结构,以便配置不同的来源和格式来构建您的配置。主要目标是使用 proc 宏实现非常简单。

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

Download history 451/week @ 2024-04-30 731/week @ 2024-05-07 856/week @ 2024-05-14 1093/week @ 2024-05-21 864/week @ 2024-05-28 820/week @ 2024-06-04 953/week @ 2024-06-11 877/week @ 2024-06-18 994/week @ 2024-06-25 897/week @ 2024-07-02 910/week @ 2024-07-09 802/week @ 2024-07-16 1198/week @ 2024-07-23 1094/week @ 2024-07-30 812/week @ 2024-08-06 640/week @ 2024-08-13

每月3,861次下载
11 个 Crates 中使用 (5 个直接使用)

MIT 许可证

69KB
1.5K SLoC

Twelf

Rust Rust Version Docs.rs

Twelf 是一个为 Rust 提供配置解决方案的工具,包括对 12-Factor 的支持。它设计有 Layer 层次结构,以便配置不同的来源和格式来构建您的配置。主要目标是使用 proc 宏 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 支持crate功能,如果你想只支持 jsonenvtoml,你只需将此添加到你的 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