#lazy-evaluation #conf #simple #env-var #lazyf

lazy_conf

一种快速统一的方式从*环境变量*程序参数*配置文件中获取配置选项

2个版本

0.1.1 2018年11月6日
0.1.0 2018年11月3日

#693 in 配置


用于 work_tock

MIT 许可证

22KB
540

更改

v : 0.1.1

  • 更新到2018年。
  • 为GetHolder用户添加了help()add_help方法,可以标记--help并获取有用的信息
  • 为抓取器添加了s_req()t_req()要求方法,
  • 为抓取器添加了help()方法,以便开发者可以描述标志的功能
  • 为Getable、Grabber和GetHolder添加了localize()方法,以便开发者可以以配置文件路径为相对位置。

lib.rs:

本模块的主要目的是提供一个非常快速的方式来访问和优先处理三个主要的配置选项

  • 作为标志的参数
  • 环境变量
  • 配置文件

对于配置文件,我使用lazyf格式,使用起来非常直接

例如,“test_data/powers.lz”的内容

Superman:
    power:fly
    age:30

#comment

Batman:
    power:money
    home:Gotham

结构只有2层深,使用任何空白字符来表示该行是子行或前一行未缩进的行。

预期用途

该程序的预期用途如下:假设前面的文件位于提供的位置之一。


use lazy_conf::config;

// note: this has to be "mut" so help messages can be added
// note: this will load the "test_data/powers" file described above
let mut cfg =
config("-c",&["test_data/powers.lz","{HOME}/.config/myprogram.lz"])
                .unwrap();
                //only fails if -c was provided, but badly formed


// Use grab builder to get the info out.
// note: The help method makes a uses all of the previous cf,fg and env 
//  calls to build a useful message to the user.
let spower = cfg.grab()
                .cf("Superman.power") 
                .fg("-sppower")
                .env("SUPERMAN_POWER")
                .help("What power") 
                .s();

assert_eq!(spower,Some("fly".to_string()));


// You can search multiple elements of the same kind.
// If the first is not available the second will be chosen:
let home = cfg.grab()
                .cf("Superman.home")
                .cf("Batman.home").s();

assert_eq!(home,Some("Gotham".to_string()));

// s() closes returning an Option<String>, 
// t() closes returning a Result<T> where T:FromStr

let age = cfg.grab().cf("Superman.age").t::<i32>();

assert_eq!(age,Ok(30));

// The "help" method, checks for the presence of a "--help" in the
// arguments, if found: it prints the compiled help info.

if cfg.help("A Program to collect Superpowers") {
    // if flag --help existed, cfg prints collated help messages,
    // and returns true
    return;
}

// to see the message we can call 
let hs = cfg.help_string("My Program");
assert_eq!(&hs,"\
My Program
Config file location flag: \"-c\"
default locations : [\"test_data/powers.lz\", \"{HOME}/.config/myprogram.lz\"]
What power:
\tConf:Superman.power,\tFlag:-sppower,\tEnv:SUPERMAN_POWER,\n\n"); 

加载文件

let cfg = config("-c",[loc1,loc2,loc3,etc]);

给定的标志(“-c”)允许用户为主要的配置文件提供不同的路径。

myprogram -c localconf.lz

无论是否提供了此标志,程序都将尝试加载所有文件。

如果没有找到任何文件,也不会被视为错误。

当请求lz时,它将按顺序搜索它们(预加载):“-c”、“loc1”、“loc2”等

无运行时依赖项