2 个不稳定版本

0.2.0 2021 年 5 月 20 日
0.1.0 2020 年 8 月 3 日

#398 in 配置


elasticli 中使用

ISC 许可证

33KB
527

Hydroconf logo

Hydroconf

Rust 的轻松配置管理。让您的应用保持活力!

Build Code Coverage Downloads (all time) ISC License

Hydroconf 是一个基于 config-rs 的 Rust 配置管理库,深受 Python 的 dynaconf 启发。

功能

  • 12-Factor 配置原则的启发
  • 有效分离敏感信息(机密信息)
  • 分层系统,适用于多环境(例如,开发、测试、生产等)
  • 合理的默认设置,一行代码即可加载配置
  • JSONTOMLYAMLHJSONINI 文件中读取

config-rs 库是一个很好的构建块,但它不提供默认机制来加载配置和合并机密信息,同时保持不同环境分离。Hydroconf 补充了这一空白。

快速入门

假设您有以下文件结构

├── config
│   ├── .secrets.toml
│   └── settings.toml
└── your-executable

settings.toml:

[default]
pg.port = 5432
pg.host = 'localhost'

[production]
pg.host = 'db-0'

.secrets.toml:

[default]
pg.password = 'a password'

[production]
pg.password = 'a strong password'

然后,在您的可执行源代码中(确保将 serde = { version = "1.0", features = ["derive"] } 添加到依赖项中)

use serde::Deserialize;
use hydroconf::Hydroconf;

#[derive(Debug, Deserialize)]
struct Config {
    pg: PostgresConfig,
}

#[derive(Debug, Deserialize)]
struct PostgresConfig {
    host: String,
    port: u16,
    password: String,
}

fn main() {
    let conf: Config = match Hydroconf::default().hydrate() {
        Ok(c) => c,
        Err(e) => {
            println!("could not read configuration: {:#?}", e);
            std::process::exit(1);
        }
    };

    println!("{:#?}", conf);
}

如果您编译并运行程序(确保可执行文件位于与 config 目录相同的目录中),您将看到以下内容

$ ./your-executable
Config {
    pg: PostgresConfig {
        host: "localhost",
        port: 5432,
        password: "a password"
    }
}

Hydroconf 将默认选择 [default] 表中的设置。如果您将 ENV_FOR_HYDRO 设置为 production,Hydroconf 将用生产环境覆盖它们

$ ENV_FOR_HYDRO=production ./your-executable
Config {
    pg: PostgresConfig {
        host: "db-0",
        port: 5432,
        password: "a strong password"
    }
}

设置始终可以用环境变量覆盖

$ HYDRO_PG__PASSWORD="an even stronger password" ./your-executable
Config {
    pg: PostgresConfig {
        host: "localhost",
        port: 5432,
        password: "an even stronger password"
    }
}

有关所有 Hydroconf 配置选项的描述以及程序配置如何加载的详细信息,请参阅 文档

Logo 由 Freepik 制作,来自 www.flaticon.com

依赖项

~4MB
~83K SLoC