#clap #automatic #derive #command-line #prefix #arguments #parser

bin+lib prefixopt

参阅 读取文件。从结构体和枚举自动派生选项以供 clap 使用。

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

MIT/Apache

17KB
380

PrefixOpt

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

通用用途

为结构体或枚举派生 PrefixOpt 实现了 PrefixOpt 特性,允许创建带有前缀的结构体。此结构体可以转换为参数并绑定到 clap::App。该结构体允许解析 ArgMatchesApp

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 集成,目前仅支持扁平标志和选项。
  • 添加注释以删除对默认值的依赖并要求参数。
  • 添加注释以更改打印名称而不是字段名称。
  • 添加注释以别名短名称或更短的 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