Я использую ящик Clap для анализа параметров командной строки. Я определил подкоманду ls
, которая должна выводить список файлов. Clap также определяет подкоманду help
, которая отображает информацию о приложении и его использовании.
Если команда не указана, вообще ничего не отображается, но я хочу, чтобы в этом случае приложение отображало справку.
Я пробовал этот код, который выглядит довольно простым, но не работает:
extern crate clap;
use clap::{App, SubCommand};
fn main() {
let mut app = App::new("myapp")
.version("0.0.1")
.about("My first CLI APP")
.subcommand(SubCommand::with_name("ls").about("List anything"));
let matches = app.get_matches();
if let Some(cmd) = matches.subcommand_name() {
match cmd {
"ls" => println!("List something here"),
_ => eprintln!("unknown command"),
}
} else {
app.print_long_help();
}
}
Я получаю сообщение об ошибке app
после перемещения:
error[E0382]: use of moved value: `app`
--> src/main.rs:18:9
|
10 | let matches = app.get_matches();
| --- value moved here
...
18 | app.print_long_help();
| ^^^ value used here after move
|
= note: move occurs because `app` has type `clap::App<'_, '_>`, which does not implement the `Copy` trait
Читая документацию по Clap, я обнаружил, что clap::ArgMatches
, возвращаемый в get_matches()
, имеет метод _ 8_, которое возвращает строку для части использования, но, к сожалению, только эту часть и ничего больше.