8个稳定版本
2.1.4 | 2024年7月18日 |
---|---|
2.1.3 | 2024年6月28日 |
2.1.1 | 2024年3月6日 |
2.1.0 | 2023年12月11日 |
1.0.0 | 2022年10月6日 |
#29 in 配置
918每月下载次数
在 more-options 中使用
120KB
2.5K SLoC
更多配置
更多配置是Rust的配置库。
你可能正在寻找
功能
此crate提供以下功能
- default - 配置抽象,包括 std 功能
- std - 标准配置实现
- all - 包含所有功能,除了 async
- async - 在异步上下文中使用配置
- mem - 内存中的配置源
- env - 环境变量配置源
- cmd - 命令行参数配置源
- json - *.json文件配置源
- xml - *.xml文件配置源
- ini - *.ini文件配置源
- chained - 链接多个配置源
- binder - 将配置绑定到强类型值和结构
使用
--features all,async
以启用所有具有异步支持的功能
配置实践
考虑以下 demo.json
文件
{
"text": "Hello world!",
"demo": true,
"clients": [{
"region": "us-west",
"url": "https://tempuri.org"
}]
}
可以从多个源加载数据、合并和访问配置
use config::{*, ext::*};
fn main() {
let config = DefaultConfigurationBuilder::new()
.add_in_memory(&[("Demo", "false")])
.add_json_file("demo.json".is().optional())
.add_env_vars()
.add_command_line()
.build()
.unwrap();
if let Some(demo) = config.get("demo") {
if demo.as_str() == "true" {
println!("{}", config.get("Text").unwrap().as_str());
println!("{}", config.get("Clients:0:Region").unwrap().as_str());
return;
}
}
println!("Not a demo!");
}
原始配置值可以使用,但将它们绑定到强类型值会更有趣
use serde::Deserialize;
#[derive(Default, Deserialize)]
#[serde(rename_all(deserialize = "PascalCase"))]
struct Client {
region: String,
url: String,
}
#[derive(Default, Deserialize)]
#[serde(rename_all(deserialize = "PascalCase"))]
struct AppOptions {
text: String,
demo: bool,
clients: Vec<Client>,
}
JSON配置键的首字母被转换为大写。
use config::{*, ext::*};
fn main() {
let file = std::env::current_exe()
.unwrap()
.parent()
.unwrap()
.join("../../demo.json");
let config = DefaultConfigurationBuilder::new()
.add_json_file(file)
.build()
.unwrap();
let app: AppOptions = config.reify();
if app.demo {
println!("{}", &app.text);
println!("{}", &app.clients[0].region);
return;
}
println!("Not a demo!");
}
最低支持的Rust版本
当增加最低支持的Rust版本(MSRV)时,新版本至少发布六个月前。当前MSRV是1.60。
许可协议
此项目遵循 MIT许可协议。
依赖项
~0–11MB
~55K SLoC