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, }
こんな感じでする。
ということで、メモでしたー。