4 个版本 (破坏性更新)
使用旧的 Rust 2015
0.4.0 | 2017 年 11 月 8 日 |
---|---|
0.3.0 | 2017 年 9 月 25 日 |
0.2.0 | 2017 年 9 月 19 日 |
0.1.0 | 2017 年 9 月 18 日 |
#45 in #deriving
用于 prty
35KB
837 行
PrefixOpt
使用 derive 宏添加具有前缀的命令行选项,以覆盖结构体和枚举的字段。这是为了扩展 clap。
通用用途
为结构体或枚举派生 PrefixOpt 实现了 PrefixOpt trait,这允许创建具有前缀的结构体。这个结构体可以转换为参数并绑定到 clap::App
。该结构体允许解析 ArgMatches
。
PrefixOpt 的派生器要求结构体和枚举都实现 Default
。
示例
将 prefixopt
和 prefixopt-derive
添加到您的 Cargo.toml
依赖项中
[dependencies]
prefixopt = "0.1.0"
prefixopt-derive = "0.1.0"
然后在您的 rust 文件中
extern crate prefixopt;
#[macro_use]
extern crate prefixopt_derive;
use prefixopt::core::*;
#[derive(Debug, PrefixOpt)]
pub enum A<T> {
A(Box<T>, Option<Option<u8>>),
B{x:T},
C,
D(),
E(::std::marker::PhantomData<u32>)
}
impl Default for A {
fn default() -> A {
A::A(Box::new(1), None)
}
}
fn main() {
let a_opt = A::<u32>::with_prefix("o");
let app = a_opt.as_arguments().bind_app(clap::App::new("testing"));
let a = a_opt.match_arguments(&app.get_matches());
println!("{:?}", a);
}
原因
我有一个选项过多的程序,无法手动编码。我喜欢 OpenSSH 的 -o
方法,它应该可以自动生成。我将该方法扩展到枚举,并喜欢索引-like 语法。
待办事项和可能的扩展
按个人重要性的通用顺序。
- 与 structopt 的可选集成,目前仅支持扁平标志和选项。
- 添加注释以取消对默认值的依赖并要求参数。
- 添加注释以更改打印名称而不是字段名称。
- 添加注释以别名短名称或更短的长名称。
- 为参数添加描述注释。
- 删除 with_prefix 结构体,依赖于 clap API 关于所有字符串更改,问题 1041。
变更日志
- 0.4.0 为结构体和枚举添加泛型。
- 0.3.0 更少的格式化,删除结构体和枚举中一元元组的冗余索引。
- 0.2.0 修复默认值错误,选项最小地更改其姐妹:仅在非默认枚举区分符中的姐妹字段。
- 0.1.0 初版,存在已知错误。
许可证
双许可。
本软件遵循Apache许可证2.0版http://www.apache.org/licenses/LICENSE2.0或MIT许可证http://opensource.org/licenses/MIT,具体使用任选其一。除上述条款规定外,不得复制、修改或分发本项目。
依赖项
~2.5MB
~48K SLoC