Я пытаюсь написать CLI в Rust с помощью Clap и YAML. Мой ввод потребует один аргумент (путь к файлу) и один из флагов -s
, -r
или -g
. Для флагов -s
и -r
потребуется один из двух флагов -t
и -m
, но флаг -g
конфликтует как с -t
, так и с -m
. Я пытаюсь настроить его таким образом, чтобы -g
не был принят, если выбран -t
или -m
, но он запрещает использование -s
или -r
с -t
или -m
.
Как настроить файл YAML таким образом, чтобы я мог запретить -gt
и -gm
, но разрешить (и потребовать) использование -t
или -m
с -s
или -r
?
cli.yml:
name: mfm
version: "0.1.0"
author: Jonathan Marple <elpramnoj@gmail.com>
about: Media file manager written in rust.
args:
- INPUT:
help: Sets the input file(s) to use
required: true
- scrape:
short: s
long: scrape
help: Scrape information on show/movie
requires:
- DB
- rename:
short: r
long: rename
help: Rename file(s)
requires:
- DB
- generate:
short: g
long: generate
help: Generate folders for file(s)
conflicts_with:
- tvdb
- tmdb
- tvdb:
short: t
long: tvdb
help: Pull from tvdb
- tmdb:
short: m
long: tmdb
help: Pull from tmdb
groups:
- CMD:
required: true
args:
- scrape
- rename
- generate
- DB:
args:
- tvdb
- tmdb
Я также пытался пометить DB
под conflicts_with:
, но он ведет себя одинаково независимо.