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

Download history 82/week @ 2024-05-03 112/week @ 2024-05-10 40/week @ 2024-05-17 23/week @ 2024-05-24 38/week @ 2024-05-31 91/week @ 2024-06-07 352/week @ 2024-06-14 212/week @ 2024-06-21 351/week @ 2024-06-28 42/week @ 2024-07-05 183/week @ 2024-07-12 333/week @ 2024-07-19 666/week @ 2024-07-26 103/week @ 2024-08-02 43/week @ 2024-08-09 43/week @ 2024-08-16

918每月下载次数
more-options 中使用

MIT 许可证

120KB
2.5K SLoC

更多配置   CI Crates.io MIT licensed

更多配置是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