summaryrefslogtreecommitdiff
path: root/src/systems
diff options
context:
space:
mode:
Diffstat (limited to 'src/systems')
-rw-r--r--src/systems/cmd/errors.rs4
-rw-r--r--src/systems/cmd/macros.rs5
-rw-r--r--src/systems/cmd/processer.rs11
3 files changed, 10 insertions, 10 deletions
diff --git a/src/systems/cmd/errors.rs b/src/systems/cmd/errors.rs
index 0b01abf..abde5de 100644
--- a/src/systems/cmd/errors.rs
+++ b/src/systems/cmd/errors.rs
@@ -8,6 +8,7 @@ pub enum CmdPrepareError {
#[error("{0}")]
Error(String),
+ // Workspace Reader Errors
#[error("LocalWorkspace not found")]
LocalWorkspaceNotFound,
@@ -110,9 +111,6 @@ pub enum CmdProcessError {
#[error("No matching command found")]
NoMatchingCommand,
- #[error("Ambiguous command, multiple matches found")]
- AmbiguousCommand(Vec<String>),
-
#[error("Parse error")]
ParseError(String),
diff --git a/src/systems/cmd/macros.rs b/src/systems/cmd/macros.rs
index c7d576d..23a277c 100644
--- a/src/systems/cmd/macros.rs
+++ b/src/systems/cmd/macros.rs
@@ -161,6 +161,9 @@ macro_rules! command_template {
#[macro_export]
macro_rules! cmd_output {
($v:expr, $t:ty) => {
- Ok((Box::new($v), stringify!($t).to_string()))
+ Ok((
+ Box::new($v) as Box<dyn std::any::Any + Send + 'static>,
+ stringify!($t).to_string(),
+ ))
};
}
diff --git a/src/systems/cmd/processer.rs b/src/systems/cmd/processer.rs
index 4bcaaeb..196764a 100644
--- a/src/systems/cmd/processer.rs
+++ b/src/systems/cmd/processer.rs
@@ -37,12 +37,11 @@ pub async fn jv_cmd_process(
}
_ => {
// Multiple matching nodes found
- return Err(CmdProcessError::AmbiguousCommand(
- matching_nodes
- .iter()
- .map(|s| s.to_string())
- .collect::<Vec<String>>(),
- ));
+ // Find the node with the longest length (most specific match)
+ let matched_prefix = matching_nodes.iter().max_by_key(|node| node.len()).unwrap();
+ let prefix_len = matched_prefix.split_whitespace().count();
+ let trimmed_args: Vec<String> = args.into_iter().cloned().skip(prefix_len).collect();
+ return jv_cmd_process_node(matched_prefix, trimmed_args, ctx, renderer_override).await;
}
}
}