2个版本
0.1.1 | 2018年11月6日 |
---|---|
0.1.0 | 2018年11月3日 |
#693 in 配置
用于 work_tock
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”等