From 3f87fc506861cc813675d30081d94b025bada97d Mon Sep 17 00:00:00 2001 From: mat Date: Mon, 18 Apr 2022 15:28:25 +0000 Subject: [PATCH] add find_node --- azalea-brigadier/src/dispatcher.rs | 18 ++++++++++++++++++ azalea-brigadier/src/tree.rs | 4 ++++ 2 files changed, 22 insertions(+) diff --git a/azalea-brigadier/src/dispatcher.rs b/azalea-brigadier/src/dispatcher.rs index 23e855c0..e67a0268 100644 --- a/azalea-brigadier/src/dispatcher.rs +++ b/azalea-brigadier/src/dispatcher.rs @@ -196,6 +196,18 @@ impl CommandDispatcher { vec![] } + pub fn find_node(&self, path: &[&str]) -> Option>>> { + let mut node = self.root.clone(); + for name in path { + if let Some(child) = node.clone().borrow().child(name) { + node = child + } else { + return None; + } + } + Some(node) + } + /// Executes a given pre-parsed command. pub fn execute_parsed(parse: ParseResults) -> Result { if parse.reader.can_read() { @@ -993,4 +1005,10 @@ mod tests { // public void testFindNodeDoesntExist() { // assertThat(subject.findNode(Lists.newArrayList("foo", "bar")), is(nullValue())); // } + #[test] + fn find_node_doesnt_exist() { + let subject = CommandDispatcher::<()>::new(); + + assert_eq!(subject.find_node(&vec!["foo", "bar"]), None) + } } diff --git a/azalea-brigadier/src/tree.rs b/azalea-brigadier/src/tree.rs index ee279542..3dc75de0 100644 --- a/azalea-brigadier/src/tree.rs +++ b/azalea-brigadier/src/tree.rs @@ -138,6 +138,10 @@ impl CommandNode { } } + pub fn child(&self, name: &str) -> Option>>> { + self.children.get(name).cloned() + } + pub fn parse_with_context( &self, reader: &mut StringReader,