#clap #automatic #derive #bounds #deriving #arguments #prefixopt

二进制文件 prefixopt_derive

查看 ReadMe。自动从结构体和枚举派生选项,用于与 clap 一起使用。

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

MIT/Apache

35KB
837

PrefixOpt

使用 derive 宏添加具有前缀的命令行选项,以覆盖结构体和枚举的字段。这是为了扩展 clap。

通用用途

为结构体或枚举派生 PrefixOpt 实现了 PrefixOpt trait,这允许创建具有前缀的结构体。这个结构体可以转换为参数并绑定到 clap::App。该结构体允许解析 ArgMatches

PrefixOpt 的派生器要求结构体和枚举都实现 Default

示例

prefixoptprefixopt-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