Вот как я закончил работу:
Во-первых, я поместил всю свою основную функцию в loop
, чтобы она могла получать команды и оставаться в CLI.
Затем я получил ввод через stdin
и разделил аргументы
// Print command prompt and get command
print!("> ");
io::stdout().flush().expect("Couldn't flush stdout");
let mut input = String::new();
io::stdin().read_line(&mut input).expect("Error reading input.");
let args = WORD.captures_iter(&input)
.map(|cap| cap.get(1).or(cap.get(2)).unwrap().as_str())
.collect::<Vec<&str>>();
Затем я использовал Clap для анализа, вроде как @ harmi c предложил
let matches = App::new("MyApp")
// ... command line argument options
.get_matches_from(words);
и использовал subcommands
вместо arguments
.
например,
.subcommand(SubCommand::with_name("list")
.help("Print namespaces currently tracked in the database."))
Весь файл здесь для любопытных.