cli/command.rs: implement prefix match
This commit is contained in:
parent
8f62336b0f
commit
baed30b702
|
@ -1,4 +1,5 @@
|
||||||
target/release/api-test-server /usr/sbin
|
target/release/api-test-server /usr/sbin
|
||||||
|
target/release/pbs /usr/sbin
|
||||||
www/images/logo-128.png /usr/share/javascript/proxmox-backup-server/images/
|
www/images/logo-128.png /usr/share/javascript/proxmox-backup-server/images/
|
||||||
www/images/proxmox_logo.png /usr/share/javascript/proxmox-backup-server/images/
|
www/images/proxmox_logo.png /usr/share/javascript/proxmox-backup-server/images/
|
||||||
www/proxmox-backup-gui.js /usr/share/javascript/proxmox-backup-server/js/
|
www/proxmox-backup-gui.js /usr/share/javascript/proxmox-backup-server/js/
|
|
@ -27,6 +27,28 @@ fn handle_simple_command(cli_cmd: &CliCommand, args: Vec<String>) -> Result<(),
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn find_command<'a>(def: &'a HashMap<String, CommandLineInterface>, name: &str) -> Option<&'a CommandLineInterface> {
|
||||||
|
|
||||||
|
if let Some(sub_cmd) = def.get(name) {
|
||||||
|
return Some(sub_cmd);
|
||||||
|
};
|
||||||
|
|
||||||
|
let mut matches: Vec<&str> = vec![];
|
||||||
|
|
||||||
|
for cmd in def.keys() {
|
||||||
|
if cmd.starts_with(name) {
|
||||||
|
matches.push(cmd); }
|
||||||
|
}
|
||||||
|
|
||||||
|
if matches.len() != 1 { return None; }
|
||||||
|
|
||||||
|
if let Some(sub_cmd) = def.get(matches[0]) {
|
||||||
|
return Some(sub_cmd);
|
||||||
|
};
|
||||||
|
|
||||||
|
None
|
||||||
|
}
|
||||||
|
|
||||||
fn handle_nested_command(def: &HashMap<String, CommandLineInterface>, mut args: Vec<String>) -> Result<(), Error> {
|
fn handle_nested_command(def: &HashMap<String, CommandLineInterface>, mut args: Vec<String>) -> Result<(), Error> {
|
||||||
|
|
||||||
if args.len() < 1 {
|
if args.len() < 1 {
|
||||||
|
@ -44,11 +66,9 @@ fn handle_nested_command(def: &HashMap<String, CommandLineInterface>, mut args:
|
||||||
|
|
||||||
let command = args.remove(0);
|
let command = args.remove(0);
|
||||||
|
|
||||||
let sub_cmd = match def.get(&command) {
|
let sub_cmd = match find_command(def, &command) {
|
||||||
Some(cmd) => cmd,
|
Some(cmd) => cmd,
|
||||||
None => {
|
None => bail!("no such command '{}'", command),
|
||||||
bail!("no such command '{}'", command);
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
match sub_cmd {
|
match sub_cmd {
|
||||||
|
|
Loading…
Reference in New Issue