なつねこメモ

主にプログラミング関連のメモ帳 ♪(✿╹ヮ╹)ノ

書いてあるコードは自己責任でご自由にどうぞ。記事本文の無断転載は禁止です。

2022/03/15

clap で排他的なコマンドオプションを実装したい

カテゴリー:Rust

clap crate で排他的なコマンドオプションを実装するときのメモ。
なんか直感的ではなくて悩んでしまったので。

例えば、 --is-interactive--name, --description の片方のペアのみを受け入れたい場合は下のようにします。

use clap::{ArgGroup, Parser};

#[derive(Parser)]
#[clap(group(ArgGroup::new("non-interactive")
    .args(&["name", "description"])
    .requires_all(&["name", "description"])
    .multiple(true)
    .conflicts_with("is-interactive"))
)]
pub struct Args {
    #[clap(long)]
    name: Option<String>,

    #[clap(long)]
    description: Option<String>,

    #[clap(long = "is-interactive")]
    is_interactive: bool,
}

こんな感じでする。

ということで、メモでしたー。