#command-line-arguments #env-var #command-line #arguments #environment #line #command

clap_conf

一个库,用于统一命令行参数、配置文件和环境变量。并使用户更轻松地向您的程序说明如何通过三个主要输入源来处理程序的行为

6 个版本

0.2.0 2021 年 12 月 23 日
0.1.6 2021 年 12 月 21 日
0.1.5 2020 年 5 月 28 日
0.1.4 2020 年 4 月 7 日
0.1.0 2019 年 5 月 6 日

#348配置

Download history 46/week @ 2024-03-11 37/week @ 2024-03-18 82/week @ 2024-03-25 69/week @ 2024-04-01 38/week @ 2024-04-08 39/week @ 2024-04-15 49/week @ 2024-04-22 39/week @ 2024-04-29 30/week @ 2024-05-06 50/week @ 2024-05-13 33/week @ 2024-05-20 52/week @ 2024-05-27 57/week @ 2024-06-03 44/week @ 2024-06-10 39/week @ 2024-06-17 68/week @ 2024-06-24

213 每月下载量
用于 3 crates

MIT 许可证

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