#configuration #env-var #builder #macro #config-file #config-rs

confine

基于 config-rs 构建的具有观点的配置宏

4 个版本

0.1.3 2024 年 8 月 12 日
0.1.2 2024 年 8 月 12 日
0.1.1 2024 年 8 月 11 日
0.1.0 2024 年 8 月 11 日

138配置

Download history 90/week @ 2024-08-05 196/week @ 2024-08-12

每月 286 次下载

MIT/Apache

10KB
56

confine-rs

Crates.io

这个包提供了加载配置文件的宏和构建器 API。我建议在大多数情况下使用宏,因为它提供了一种更简洁的加载配置文件的方式。使用任何一个,你都将获得一个用于你的配置结构的 try_load 函数。这将按优先级顺序从以下来源实例化你的结构体

  1. config/application.toml
  2. config/application-{environment}.toml
  3. 环境变量

环境由环境变量 CONFINE_ENV 确定,该变量必须设置才能加载特定环境的配置文件。

你可以配置这些设置中的大多数,但结构始终得到强制执行。你可以配置的内容包括

  • 配置文件的路径(默认:config
  • 配置文件的名称前缀(默认:application
  • 确定环境的环境变量(默认:CONFINE_ENV

用法

默认配置

use confine::confine;

fn main() {
    let config = MyConfig::try_load().unwrap();
}

#[derive(Deserialize)]
#[confine]
struct MyConfig {
    pub my_int: i64,
    pub my_string: String,
    pub my_bool: bool,
}

构建器

use confine::ConfineConfigBuilder;
use serde::Deserialize;

fn main() {
    let config = ConfineConfigBuilder::default()
        .try_load::<MyConfig>()
        .unwrap();
}

#[derive(Deserialize)]
struct MyConfig {
    pub my_int: i64,
    pub my_string: String,
    pub my_bool: bool,
}

自定义配置

use confine::confine;

fn main() {
    let config = MyConfig::try_load().unwrap();
}

#[derive(Deserialize)]
#[confine(
    path = "my_config",
    prefix = "my_prefix",
    env_var = "MY_ENV"
)]
struct MyConfig {
    pub my_int: i64,
    pub my_string: String,
    pub my_bool: bool,
}

构建器

use confine::ConfineConfigBuilder;
use serde::Deserialize;

fn main() {
    let config = ConfineConfigBuilder::default()
        .path("my_config")
        .prefix("my_prefix")
        .env_var("MY_ENV")
        .try_load::<MyConfig>()
        .unwrap();
}

#[derive(Deserialize)]
struct MyConfig {
    pub my_int: i64,
    pub my_string: String,
    pub my_bool: bool,
}

动机

我发现自己在 Rust 中反复编写相同的加载配置文件的样板代码。此外,虽然 config-rs 是一个很棒的库,但它允许你在处理配置时有很大的灵活性。特别是当在多个项目中工作时,我更喜欢有一个一致的方式来存储和加载配置文件。这个包旨在提供一个易于使用的宏,用于以合理的默认值加载配置文件。

依赖项

~2.4–3.5MB
~70K SLoC