6 个版本
0.2.0 | 2021 年 12 月 23 日 |
---|---|
0.1.6 |
|
0.1.5 | 2020 年 5 月 28 日 |
0.1.4 | 2020 年 4 月 7 日 |
0.1.0 | 2019 年 5 月 6 日 |
#348 在 配置
213 每月下载量
用于 3 crates
28KB
753 行
Clap Conf
一个用于处理配置文件、命令行参数和环境变量的库。
目的
程序在初始化时获取操作参数主要有三种方式。
- 命令行参数。
- 配置文件。
- 环境变量。
如果您只想使用命令行参数,Clap 是一个很棒的项目,它可以帮助您的命令行程序提供如此出色且清晰的用户体验。
然而,如果您想使程序处理这三种参数,那么您的工作就不少了。
这些参数的行为各不相同,但通常您希望能够使用其中之一,如果第一个没有提供,则回退到其他参数。
例如。假设您已经构建了一个 clap matches 对象
//without clap conf but with clap.
//This code ignores the fact that env returns String,(and has to)
//but most config files and clap returns &str Which makes it even more tricky to handle
let filename = clap_matches.value_of("filename").unwrap_or(
config.get("filename").unwrap_or(
std::env::var("PROG_FILENAME").unwrap_or("")
)
);
clap_conf 提供了一个包装器来处理这种情况,以便可以使用构建器模式收集结果。
use clap_conf::prelude::*;
//once at the top of the file.
let cfg = with_toml_env(&clap_matches,&["priority/config/location","another/possible/location"]);
//something like this for every item.
let filename = cfg.grab().arg("filename").conf("filename").env("PROG_FILENAME").def("None");
//Or if you do not want to use a default and instead return an option.
let filename = cfg.grab().arg("filename").conf("filename").env("PROG_FILENAME").done();
clap_conf 还可以处理 toml 文件中的嵌套结构。
let nested = cfg.grab().conf("a.b.nested_property").done();
结合类型值一直很棘手,因为 CLI 和 clap 都期望您按自己的意愿解析结果,但 toml 会为您做这件事。因此,对于非字符串属性,它将它们转换回字符串。
这并不理想,但总比没有好。
变更
0.1.5
现在使用 std::error::Error;
1.4
添加了 ConfError 的新方法 .add_info(self, &str)->Self
,因此您可以懒惰地添加信息到消息 .req()
中,添加到 LocalGrabber;
添加了MultiGrabber,因此获取数组变得更加简单:使用grab_multi()
,就像使用grab()
或grab local()
1.3
向Grabber添加了.req()和ask_default()
1.1
添加了Localizer,现在将toml值包装在localizer中,以便with_toml_env可以使用。添加了本地Grabber,因此grab_local()
应返回一个相对于所选配置文件的本地路径
依赖关系
~1.3–2MB
~35K SLoC