diff options
| author | mat <github@matdoes.dev> | 2022-04-18 15:28:25 +0000 |
|---|---|---|
| committer | mat <github@matdoes.dev> | 2022-04-18 15:28:30 +0000 |
| commit | 3f87fc506861cc813675d30081d94b025bada97d (patch) | |
| tree | 977d13b7991af90fd96136182455a82b00696ae5 | |
| parent | d25c9926d714e1920a8656452f20cab60565443f (diff) | |
| download | azalea-drasl-3f87fc506861cc813675d30081d94b025bada97d.tar.xz | |
add find_node
| -rw-r--r-- | azalea-brigadier/src/dispatcher.rs | 18 | ||||
| -rw-r--r-- | azalea-brigadier/src/tree.rs | 4 |
2 files changed, 22 insertions, 0 deletions
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<S> CommandDispatcher<S> { vec![] } + pub fn find_node(&self, path: &[&str]) -> Option<Rc<RefCell<CommandNode<S>>>> { + 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<S>) -> Result<i32, CommandSyntaxException> { 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<S> CommandNode<S> { } } + pub fn child(&self, name: &str) -> Option<Rc<RefCell<CommandNode<S>>>> { + self.children.get(name).cloned() + } + pub fn parse_with_context( &self, reader: &mut StringReader, |
