Можно ли настроить группы аргументов неизвестного размера с помощью Clap?

Я создаю интерфейс командной строки, который может вызывать другие базовые программы, у которых есть собственные параметры и аргументы. Я хотел бы иметь возможность передавать эти параметры программе через интерфейс командной строки.

$ cli --program [PROGRAM] --programOpts[OPT1, OPT2, ...]

Пример:

$ cli --program foo --programOpts.bar 'foo' --programOpts.foo 'bar'

^ В этом случае bar и foo в programOpts cli неизвестны. CLI знает только programOpts и что это неизвестный вектор параметров, специфичных для вызываемой базовой программы.

Я надеялся, что у Clap есть API для реализации такой вещи (изучал Arg и ArgGroup), но это не похоже на это.

А есть такой API?


person Pascal Precht    schedule 18.01.2019    source источник
comment
Это сработает, если вы скажете, что ваш аргумент - Vec?   -  person Boiethios    schedule 18.01.2019
comment
Взгляните clap::Values здесь, если не можете предположить, что значения закодированы в UTF-8, используйте clap::OsValues.   -  person FrederikDS    schedule 18.01.2019
comment
@FrederikDS, который, однако, получит другой API: --opts 'one' 'two' 'tree'. Я искал: --opts.one 'foo' --opts.two 'bar', где 'one' и 'two' не известны   -  person Pascal Precht    schedule 18.01.2019
comment
Как пользователь инструментов CLI, я был бы удивлен синтаксисом --programOpts.bar 'foo'. Я бы предпочел что-то вроде --programOpts 'bar=foo'.   -  person SirDarius    schedule 18.01.2019
comment
@SirDarius на самом деле кажется довольно обычным иметь синтаксис option.property в командах CLI ...   -  person Pascal Precht    schedule 23.01.2019


Ответы (1)


После дальнейших исследований я решил пойти немного по другому пути и воспользоваться преимуществами известного синтаксиса UNIX --.

Это означает, что все параметры и флаги, следующие после --, будут переданы базовой программе:

$ cli --program [PROGRAM] -- foo bar --bazinga --yay=w00t

Это можно сделать с помощью конфигурации Clap .raw() в структурах Arg.

person Pascal Precht    schedule 23.01.2019