2个版本

0.1.1 2023年11月6日
0.1.0 2023年10月26日

#641 in 进程宏

MIT许可协议

7KB
76

merge-cfg

根据优先级合并或覆盖配置。

用法

首先,您可以通过任何方式从配置文件中获取配置。然后从命令行参数中派生MergeCfg来合并您的配置。

use merge_cfg::MergeCfg;

#[derive(Debug, MergeCfg)]
struct Config {
    id: u64,
    name: String,
    scores: Vec<i32>,
}

fn main() {
    let mut cfg = Config {
        id: 1,
        name: "abc".to_string(),
        scores: vec![-1],
    };
    cfg.merge_cfg();
    println!("{:?}", cfg);
}

命令行参数格式:{field}={value},字段名称应与您在结构中定义的名称相同

$ cargo run
Config { id: 1, name: "abc", scores: [-1] }

$ cargo run id=2
Config { id: 2, name: "abc", scores: [-1] }

$ cargo run name=xyz
Config { id: 1, name: "xyz", scores: [-1] }

$ cargo run scores=100 scores=-1000
Config { id: 1, name: "abc", scores: [100, -1000] }

$ cargo run id=2 name=xyz scores=100
Config { id: 2, name: "xyz", scores: [100] }

路线图

  • 支持环境变量
    • 合并优先级
    • 合并选项(选择要合并的项)
  • 更多命令行参数格式
    • 简单等式格式:{field}={value}
    • getopt格式:-h --{field} {value}
  • 各种用例
    • 非panic函数
    • 不可变函数
  • 字段别名
  • 支持复杂字段类型
  • 文档
  • README
  • ...

依赖关系

~240–680KB
~16K SLoC