包含具有不同要求和冲突的参数的 Clap arg 组
Clap arg group containing arguments with different requirements and conflicts
我正在尝试在 Clap 和 YAML 的帮助下用 Rust 编写 CLI。我的输入将需要一个参数(文件路径)和标志之一 -s
、-r
或 -g
。标志 -s
和 -r
将需要两个标志 -t
和 -m
之一,但是标志 -g
与 -t
和 -m
。我正在尝试配置它,以便在选择 -t
或 -m
时不接受 -g
,但它不允许使用 -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
我也试过在 conflicts_with:
下标记 DB
但无论如何它的行为都是一样的。
根据 Francois 的建议,我改用子命令。我必须写出我的 -t
和 -m
标志以及它们的 DB
组两次,每个使用它们的子命令一次。我试图避免这种情况以保持我的 YAML 文件干净且重复性较低,但功能更重要。
工作 YAML 文件:
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
min_values: 1
subcommands:
- scrape:
about: Scrape information on show/movie
args:
- tvdb:
short: t
long: tvdb
help: Pull from tvdb
- tmdb:
short: m
long: tmdb
help: Pull from tmdb
groups:
- DB:
required: true
args:
- tvdb
- tmdb
- rename:
about: Rename file(s)
args:
- tvdb:
short: t
long: tvdb
help: Pull from tvdb
- tmdb:
short: m
long: tmdb
help: Pull from tmdb
groups:
- DB:
required: true
args:
- tvdb
- tmdb
- generate:
about: Generate folders for file(s)
我正在尝试在 Clap 和 YAML 的帮助下用 Rust 编写 CLI。我的输入将需要一个参数(文件路径)和标志之一 -s
、-r
或 -g
。标志 -s
和 -r
将需要两个标志 -t
和 -m
之一,但是标志 -g
与 -t
和 -m
。我正在尝试配置它,以便在选择 -t
或 -m
时不接受 -g
,但它不允许使用 -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
我也试过在 conflicts_with:
下标记 DB
但无论如何它的行为都是一样的。
根据 Francois 的建议,我改用子命令。我必须写出我的 -t
和 -m
标志以及它们的 DB
组两次,每个使用它们的子命令一次。我试图避免这种情况以保持我的 YAML 文件干净且重复性较低,但功能更重要。
工作 YAML 文件:
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
min_values: 1
subcommands:
- scrape:
about: Scrape information on show/movie
args:
- tvdb:
short: t
long: tvdb
help: Pull from tvdb
- tmdb:
short: m
long: tmdb
help: Pull from tmdb
groups:
- DB:
required: true
args:
- tvdb
- tmdb
- rename:
about: Rename file(s)
args:
- tvdb:
short: t
long: tvdb
help: Pull from tvdb
- tmdb:
short: m
long: tmdb
help: Pull from tmdb
groups:
- DB:
required: true
args:
- tvdb
- tmdb
- generate:
about: Generate folders for file(s)