clap 笔记

1. ValueEnum

当我们需要使用自定义的枚举类型作为参数时,我们可以使用 clap::clap_derive::ValueEnum

1.1 derive 方式

直接上例子:

use clap::{clap_derive::ValueEnum, Parser};

#[derive(Debug, Clone, ValueEnum)]
enum Gender {
    Male,
    Female,
}

#[derive(Parser, Debug)]
#[command(version, about, long_about = None)]
struct Args {
    /// Name of the person to greet
    #[arg(short, long)]
    name: String,

    /// Gender of the person to greet
    #[arg(short, long)]
    gender: Gender,
}

fn main() {
    let args = Args::parse();
    println!("Hello {}!", args.name)
}

这样运行 --help 的结果是:

Usage: draft --name <NAME> --gender <GENDER>

Options:
  -n, --name <NAME>      Name of the person to greet
  -g, --gender <GENDER>  Gender of the person to greet [possible values: male, female]
  -h, --help             Print help
  -V, --version          Print version

可见,clap 自动地为我们标注出了接受的取值,也正好是 enum 里的命名。

1.2 builder 方式

使用 builder 方式创建参数解析时,还需要用到 clap::value_parser 宏。

use clap::{clap_derive::ValueEnum, Arg, Command};

#[derive(Debug, Clone, ValueEnum)]
enum Gender {
    Male,
    Female,
}

fn main() {
    let matches = Command::new("whatever")
        .arg(
            Arg::new("name")
                .short('n')
                .long("name")
                .value_name("NAME")
                .required(true),
        )
        .arg(
            Arg::new("gender")
                .short('g')
                .long("gender")
                .value_name("GENDER")
                .required(true)
                .value_parser(clap::value_parser!(Gender)),
        )
        .get_matches();
    println!("Hello {}!", matches.get_one::<String>("name").unwrap())
}

结果是:

Usage: draft --name <NAME> --gender <GENDER>

Options:
  -n, --name <NAME>      
  -g, --gender <GENDER>  [possible values: male, female]
  -h, --help             Print help
知识共享许可协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇