2

我使用structopt来解析我的 rust 应用程序的命令行参数。有问题的标志如下:(query位置)和case_sensitive(可选)。

#[derive(StructOpt, Debug)]
pub struct Config {
    /// Query to search for.
    #[structopt(parse(try_from_str = "parse_regex"))]
    query: Regex,

    /// Specify whether or not the query is case sensitive.
    #[structopt(long)]
    case_sensitive: bool,
}

我最终想要做的是编写parse_regex,它从查询字符串参数构建一个正则表达式。

fn parse_regex(src: &str) -> Result<Regex, Error> {
    let case_sensitive = true; // !!! problem here: how to grab the value of the `case_sensitive` flag?
    RegexBuilder::new(src).case_insensitive(!case_sensitive).build()
}

我想知道的是自定义解析函数是否有可能获取另一个标志的值(在这种情况下case_sensitive),以便动态解析自己的标志。

4

1 回答 1

0

在命令行上,标志通常可以按任何顺序传递。这使得在解析器中引入这种依赖变得很困难。

因此,我的建议是引入两步处理:

  1. 收集标志,进行一些预处理。
  2. 处理交互。

在你的情况下:

#[derive(StructOpt, Debug)]
pub struct Config {
    /// Query to search for.
    #[structopt(string)]
    query: String,

    /// Specify whether or not the query is case sensitive.
    #[structopt(long)]
    case_sensitive: bool,
}

然后后来:

fn build_regex(config: &Config) -> Result<Regex, Error> {
    RegexBuilder::new(&config.query)
        .case_insensitive(!config.case_sensitive)
        .build()
}
于 2019-06-24T08:01:01.463 回答