1 个版本 (0 个不稳定)
3.0.0-beta.1 | 2020年3月29日 |
---|
在 #clap 中排名第 161
每月下载量 669
被 clap-v3 使用
80KB
1.5K SLoC
!!! 这是 https://github.com/clap-rs/clap 的分支,为了在它作为官方crate发布之前发布v3版本而创建的分支 !!!
clap_derive
通过定义结构体来解析命令行参数。它将 structopt 和 clap 结合为一个单一体验。此crate由clap使用,不建议直接由消费者使用。
文档
在 Docs.rs 上找到。您还可以查看 示例 和 变更日志。
示例
将 clap
添加到您的 Cargo.toml
依赖中
[dependencies]
clap = "3"
然后,在您的rust文件中
use std::path::PathBuf;
use clap::Clap;
/// A basic example
#[derive(Clap, Debug)]
#[clap(name = "basic")]
struct Opt {
// A flag, true if used in the command line. Note doc comment will
// be used for the help message of the flag. The name of the
// argument will be, by default, based on the name of the field.
/// Activate debug mode
#[clap(short, long)]
debug: bool,
// The number of occurrences of the `v/verbose` flag
/// Verbose mode (-v, -vv, -vvv, etc.)
#[clap(short, long, parse(from_occurrences))]
verbose: u8,
/// Set speed
#[clap(short, long, default_value = "42")]
speed: f64,
/// Output file
#[clap(short, long, parse(from_os_str))]
output: PathBuf,
// the long option will be translated by default to kebab case,
// i.e. `--nb-cars`.
/// Number of cars
#[clap(short = "c", long)]
nb_cars: Option<i32>,
/// admin_level to consider
#[clap(short, long)]
level: Vec<String>,
/// Files to process
#[clap(name = "FILE", parse(from_os_str))]
files: Vec<PathBuf>,
}
fn main() {
let opt = Opt::parse();
println!("{:#?}", opt);
}
使用此示例
$ ./basic
error: The following required arguments were not provided:
--output <output>
USAGE:
basic --output <output> --speed <speed>
For more information try --help
$ ./basic --help
basic 0.3.0
Guillaume Pinot <[email protected]>, others
A basic example
USAGE:
basic [FLAGS] [OPTIONS] --output <output> [--] [file]...
ARGS:
<FILE>... Files to process
FLAGS:
-d, --debug Activate debug mode
-h, --help Prints help information
-V, --version Prints version information
-v, --verbose Verbose mode (-v, -vv, -vvv, etc.)
OPTIONS:
-l, --level <level>... admin_level to consider
-c, --nb-cars <nb-cars> Number of cars
-o, --output <output> Output file
-s, --speed <speed> Set speed [default: 42]
ARGS:
<file>... Files to process
$ ./basic -o foo.txt
Opt {
debug: false,
verbose: 0,
speed: 42.0,
output: "foo.txt",
nb_cars: None,
level: [],
files: [],
}
$ ./basic -o foo.txt -dvvvs 1337 -l alice -l bob --nb-cars 4 bar.txt baz.txt
Opt {
debug: true,
verbose: 3,
speed: 1337.0,
output: "foo.txt",
nb_cars: Some(
4,
),
level: [
"alice",
"bob",
],
files: [
"bar.txt",
"baz.txt",
],
}
clap derive rustc版本策略
- 最低rustc版本修改必须在 变更日志 和 travis配置 中指定。
- 如果新版本需要clap derive的一个依赖项的最新版本(
cargo update
不会在clap derive上失败),贡献者可以在没有任何理由的情况下增加最低rustc版本。 - 如果提高了库的用户体验,贡献者可以增加最低rustc版本。
原因
我(@TeXitoi)长期使用 docopt(在Rust 1.0之前)。我非常喜欢它提供的解析后的参数结构:不需要将 String
转换为 f64
,也没有无用的 unwrap
。但另一方面,我不喜欢手动编写使用说明字符串。这就像是回到了WYSIWYG编辑器的黄金时代。字段命名也略显人工化。
如今,在Rust中读取命令行参数的新标准是 clap。这个库功能非常强大!但我想说一个缺点:即使你可以验证参数并表达某个参数是必需的,你仍然需要将类似字符串向量哈希表的东西转换成你应用程序中可用的东西。
现在,有稳定的自定义 derive。因此,我可以为 clap 添加我缺少的自动转换。这就是结果。
许可证
在以下任一许可证下获得许可
- Apache License,版本 2.0 (LICENSE-APACHE 或 https://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 https://opensource.org/licenses/MIT)
任选其一。
贡献
除非你明确声明,否则,根据 Apache-2.0 许可证定义,你提交给作品以供包含的任何贡献都将按上述方式双许可,不附加任何额外的条款或条件。
依赖
~2MB
~45K SLoC