Clap arg группа, содержащая аргументы с различными требованиями и конфликтами - PullRequest
0 голосов
/ 02 июля 2018

Я пытаюсь написать 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:, но он ведет себя одинаково независимо.

1 Ответ

0 голосов
/ 04 июля 2018

По предложению Франсуа я перешел на использование подкоманд. Я должен был выписать свои -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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...