2

我正在尝试在 Clap 和 YAML 的帮助下用 Rust 编写 CLI。我的输入将需要一个参数(文件路径)和一个标志-s-r-g. 标志-sand-r将需要两个标志-tand之一-m,但标志与and-g冲突。我正在尝试对其进行配置,以便在选择or时不会被接受,但它不允许将or与or一起使用。-t-m-g-t-m-s-r-t-m

如何配置我的 YAML 文件,以便我可以禁止但允许(并要求)-gt使用or和or ?-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

我也尝试过标记DBconflicts_with:但无论如何它的行为方式相同。

4

1 回答 1

1

根据弗朗索瓦的建议,我转而使用子命令。我必须写出我的-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)
于 2018-07-04T14:30:05.990 回答