5 个版本 (3 个重大更改)
使用旧的 Rust 2015
0.4.0 | 2017 年 11 月 8 日 |
---|---|
0.3.0 | 2017 年 9 月 25 日 |
0.2.1 | 2017 年 9 月 19 日 |
0.2.0 | 2017 年 9 月 19 日 |
0.1.0 | 2017 年 9 月 18 日 |
#1937 in Rust 模式
用于 2 crate
17KB
380 行
PrefixOpt
使用前缀添加命令行选项以覆盖结构体和枚举的字段。这是为了扩展 clap。
通用用途
为结构体或枚举派生 PrefixOpt 实现了 PrefixOpt 特性,允许创建带有前缀的结构体。此结构体可以转换为参数并绑定到 clap::App
。该结构体允许解析 ArgMatches
的 App
。
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 集成,目前仅支持扁平标志和选项。
- 添加注释以删除对默认值的依赖并要求参数。
- 添加注释以更改打印名称而不是字段名称。
- 添加注释以别名短名称或更短的 long 名称。
- 为参数添加描述注释。
- 移除 with_prefix 结构,依赖于 clap API 有关所有字符串的更改,问题 1041。
变更日志
- 0.4.0 为结构体和枚举添加泛型。
- 0.3.0 更少的格式化,从结构体和枚举中的单元素元组中删除冗余索引。
- 0.2.0 修复默认错误,一个选项最小地更改其姐妹:仅针对非默认枚举区分符中的姐妹字段。
- 0.1.0 初版,存在已知错误。
许可
双许可。
本软件受Apache License 2.0 http://www.apache.org/licenses/LICENSE2.0 或MIT许可协议的许可,具体选择由您决定。本项目不得复制、修改或分发,除非按照这些条款。
依赖项
~780KB