你能构建一个接受命令行其余部分(或多个参数)的 structopt 解析器吗?

Can you build a structopt parser that takes the rest of the command line (or multiple arguments)?

structopt 有一个巧妙的功能,它可以接受 Vec<T> 的类型化参数,这将吞噬命令行的其余部分。

#[structopt(long, short)]
values: Vec<u32>,

它还有ability to accept a type you create,

If the field type does not have a FromStr implementation, or you would like to provide a custom parsing scheme other than FromStr, you may provide a custom string parser using parse(...)

您创建的类型是否可以不是标量并且具有多个值或包装 Vec<T> 是否有方法可以为包装 Vec<T> 的类型创建 custom parser但重新排序它的参数或包含多个字段的结构,例如像这样

struct Positionals {
  first: String,
  increment: String,
  last: String
}

我需要一个不同的结构,因为参数名称取决于顺序,(如果有一个参数,它只是“最后一个”,如果有两个参数,第一个参数不是最后一个,它是“第一个”,第二个参数是“最后一个”)。我想知道是否有一种方法可以编写理解这些细微差别(如上所述)的解析器,或者可以重新排序向量以适应它们。

没有

我认为目前这不可能。我打开了一个RFC for a parser that gets a vec::Drain, or a parser that get the rest of the command line。我还询问了其他方法来实现这一点。回复是,

The clap infrastructure (which structopt only expose on top of struct attribute) doesn't support this as far as I know. Validators in clap (that is named parser in structopt, as they validate and parse) are implemented on each argument, not on a set of arguments.