4个版本
0.2.1 | 2024年7月4日 |
---|---|
0.2.0 | 2024年7月3日 |
0.1.3 | 2024年7月3日 |
0.1.1 | 2024年7月3日 |
#96 in 配置
每月下载44次
45KB
1K SLoC
grafton-config
grafton-config
是一个基于Rust的配置库,为Rust应用程序提供TOML格式配置文件的标记扩展和分层配置加载功能。
特点
- 从多个TOML文件分层加载配置
- 在配置文件内动态扩展标记
- 支持特定环境的配置
- 灵活且可扩展的设计
为什么配置很重要
强大的配置管理对于
- 环境灵活性: 您的应用程序需要适应各种环境(开发、预发布、生产)。
- 安全性: 必须小心处理敏感信息,如API密钥。
- 可扩展性: 随着您的应用程序增长,其配置的复杂性也会增加。
grafton-config
解决这些挑战,为Rust开发者提供全面的解决方案。
安装
将 grafton-config
添加到您的 Cargo.toml
[dependencies]
grafton-config = "*"
使用
定义您的配置结构
让我们创建一个基本的配置结构
use serde::{Deserialize, Serialize};
use grafton_config::TokenExpandingConfig;
#[derive(Debug, Serialize, Deserialize)]
struct Server {
host: String,
port: u16,
database_url: String,
}
#[derive(Debug, Serialize, Deserialize)]
struct AppConfig {
server: Server,
}
impl TokenExpandingConfig for AppConfig {}
此结构以清晰、类型安全的方式表示您的应用程序配置。
加载您的配置
use grafton_config::{load_config_from_dir, TokenExpandingConfig, Error};
fn main() -> Result<(), Error> {
let config = grafton_config::load_config_from_dir::<AppConfig>("examples/config")?;
println!("Database URL: {}", config.server.database_url);
Ok(())
}
示例
要运行存储库中的示例,请使用以下命令
cargo run --example config_example
分层配置:核心的灵活性
grafton-config
支持分层配置,允许为不同的环境设置不同的设置。
配置文件:
配置是从以下文件在指定目录中加载的
default.toml
:您的基配置(必需)local.toml
:本地覆盖(可选){run_mode}.toml
:特定环境的配置(可选)
run_mode
由 RUN_MODE
环境变量确定,如果未设置,则默认为 dev
。文件按上述顺序加载,后面的文件覆盖前面的文件中的任何值。
示例设置:
default.toml
:
[server]
host = "localhost"
port = 5432
database_url = "postgresql://user:password@${server.host}:${server.port}/mydb"
local.toml
(可选,用于本地开发)
[server]
host = "127.0.0.1"
prod.toml
(可选,用于生产。参见上面的run_mode)
[server]
host = "db.production.com"
database_url = "postgresql://user:password@${server.host}:${server.port}/mydb"
令牌扩展:从基础到高级使用
令牌扩展是 grafton-config
的一个关键特性。它允许您在配置中引用其他值,使其更加动态并减少冗余。
基本令牌使用
令牌使用 ${key_path}
语法,其中 key_path
是到所需值的点分隔路径。
[database]
host = "db.example.com"
port = 5432
url = "postgresql://user:password@${database.host}:${database.port}/mydb"
高级令牌使用
-
嵌套路径:
[person] first_name = "John" last_name = "Doe" full_name = "${person.first_name} ${person.last_name}"
-
数组访问:
fruits = ["apple", "banana", "cherry"] favorite = "My favorite fruit is ${fruits.1}"
-
转义令牌:
literal = "This is a \${literal} dollar sign"
处理边缘情况
grafton-config
优雅地处理各种场景
- 循环引用:为了防止无限循环,存在递归限制(目前为99)。
- 部分展开:如果令牌无法完全展开,则无法展开的部分保持不变。
- 类型处理:令牌可以展开为各种 TOML 数据类型,包括字符串、整数、浮点数、布尔值和日期时间。
API 参考
load_config_from_dir(path: &str) -> Result<T, Error>
:从目录中加载和解析配置GraftonConfig
:grafton-configuration 结构体的特质TokenExpandingConfig
:支持令牌展开的配置结构体的特质
贡献
欢迎贡献!请随时提交拉取请求。
许可证
grafton-config
根据 Apache License 2.0(用于开源使用)和商业许可证进行双重授权。
开源许可证
除非明确声明,否则此存储库中的所有文件均根据 Apache License 2.0 许可。许可证的完整文本可以在 LICENSE 文件中找到。
Apache License 2.0 的主要特点
- 许可宽松:允许免费商业和非商业使用、分发和修改软件,而无需访问源代码。
- 明确专利许可:授予所有贡献者向用户授予的明确专利许可。
- 专利报复条款:保护用户和贡献者免受专利侵权索赔。
商业许可证
对于希望将 grafton-config
集成到闭源应用程序或需要比 Apache License 2.0 允许的更多灵活性的用户,提供商业许可证。有关商业许可查询,请联系 [email protected]
依赖关系
~3.5–5.5MB
~102K SLoC