diff options
| author | mat <git@matdoes.dev> | 2023-10-12 20:18:53 -0500 |
|---|---|---|
| committer | mat <git@matdoes.dev> | 2023-10-12 20:18:53 -0500 |
| commit | d82230a427847e17ed4ce105022a3c89b1d9bc6a (patch) | |
| tree | ba1186c1b8c8ceff4a3a35971f7cbd534d174ff9 | |
| parent | 38db231ea8fa0fb223e16637db0b6ec65b2b81ef (diff) | |
| download | azalea-drasl-d82230a427847e17ed4ce105022a3c89b1d9bc6a.tar.xz | |
less Arc<S> in brigadier
| -rwxr-xr-x | azalea-brigadier/src/builder/argument_builder.rs | 6 | ||||
| -rwxr-xr-x | azalea-brigadier/src/command_dispatcher.rs | 31 | ||||
| -rwxr-xr-x | azalea-brigadier/src/tree/mod.rs | 4 | ||||
| -rwxr-xr-x | azalea-brigadier/tests/command_dispatcher_usages_test.rs | 8 |
4 files changed, 22 insertions, 27 deletions
diff --git a/azalea-brigadier/src/builder/argument_builder.rs b/azalea-brigadier/src/builder/argument_builder.rs index 10191463..9d3e8cad 100755 --- a/azalea-brigadier/src/builder/argument_builder.rs +++ b/azalea-brigadier/src/builder/argument_builder.rs @@ -21,7 +21,7 @@ pub struct ArgumentBuilder<S> { arguments: CommandNode<S>, command: Command<S>, - requirement: Arc<dyn Fn(Arc<S>) -> bool + Send + Sync>, + requirement: Arc<dyn Fn(&S) -> bool + Send + Sync>, target: Option<Arc<RwLock<CommandNode<S>>>>, forks: bool, @@ -96,13 +96,13 @@ impl<S> ArgumentBuilder<S> { /// # let mut subject = CommandDispatcher::<CommandSource>::new(); /// # subject.register( /// literal("foo") - /// .requires(|s: Arc<CommandSource>| s.opped) + /// .requires(|s: &CommandSource| s.opped) /// // ... /// # .executes(|ctx: &CommandContext<CommandSource>| 42) /// # ); pub fn requires<F>(mut self, requirement: F) -> Self where - F: Fn(Arc<S>) -> bool + Send + Sync + 'static, + F: Fn(&S) -> bool + Send + Sync + 'static, { self.requirement = Arc::new(requirement); self diff --git a/azalea-brigadier/src/command_dispatcher.rs b/azalea-brigadier/src/command_dispatcher.rs index 42737fba..58210395 100755 --- a/azalea-brigadier/src/command_dispatcher.rs +++ b/azalea-brigadier/src/command_dispatcher.rs @@ -69,7 +69,7 @@ impl<S> CommandDispatcher<S> { let cursor = original_reader.cursor(); for child in node.read().get_relevant_nodes(&mut original_reader.clone()) { - if !child.read().can_use(source.clone()) { + if !child.read().can_use(&source) { continue; } let mut context = context_so_far.clone(); @@ -307,7 +307,7 @@ impl<S> CommandDispatcher<S> { pub fn get_all_usage( &self, node: &CommandNode<S>, - source: Arc<S>, + source: &S, restricted: bool, ) -> Vec<String> { let mut result = vec![]; @@ -318,12 +318,12 @@ impl<S> CommandDispatcher<S> { fn get_all_usage_recursive( &self, node: &CommandNode<S>, - source: Arc<S>, + source: &S, result: &mut Vec<String>, prefix: &str, restricted: bool, ) { - if restricted && !node.can_use(source.clone()) { + if restricted && !node.can_use(&source) { return; } if node.command.is_some() { @@ -345,7 +345,7 @@ impl<S> CommandDispatcher<S> { let child = child.read(); self.get_all_usage_recursive( &child, - Arc::clone(&source), + &source, result, if prefix.is_empty() { child.usage_text() @@ -366,14 +366,13 @@ impl<S> CommandDispatcher<S> { pub fn get_smart_usage( &self, node: &CommandNode<S>, - source: Arc<S>, + source: &S, ) -> Vec<(Arc<RwLock<CommandNode<S>>>, String)> { let mut result = Vec::new(); let optional = node.command.is_some(); for child in node.children.values() { - let usage = - self.get_smart_usage_recursive(&child.read(), source.clone(), optional, false); + let usage = self.get_smart_usage_recursive(&child.read(), source, optional, false); if let Some(usage) = usage { result.push((child.clone(), usage)); } @@ -385,11 +384,11 @@ impl<S> CommandDispatcher<S> { fn get_smart_usage_recursive( &self, node: &CommandNode<S>, - source: Arc<S>, + source: &S, optional: bool, deep: bool, ) -> Option<String> { - if !node.can_use(source.clone()) { + if !node.can_use(&source) { return None; } @@ -418,14 +417,14 @@ impl<S> CommandDispatcher<S> { let children = node .children .values() - .filter(|child| child.read().can_use(source.clone())) + .filter(|child| child.read().can_use(&source)) .collect::<Vec<_>>(); match children.len().cmp(&1) { Ordering::Less => {} Ordering::Equal => { let usage = self.get_smart_usage_recursive( &children[0].read(), - source.clone(), + source, child_optional, child_optional, ); @@ -436,12 +435,8 @@ impl<S> CommandDispatcher<S> { Ordering::Greater => { let mut child_usage = HashSet::new(); for child in &children { - let usage = self.get_smart_usage_recursive( - &child.read(), - source.clone(), - child_optional, - true, - ); + let usage = + self.get_smart_usage_recursive(&child.read(), source, child_optional, true); if let Some(usage) = usage { child_usage.insert(usage); } diff --git a/azalea-brigadier/src/tree/mod.rs b/azalea-brigadier/src/tree/mod.rs index 8ab3526e..be2efef1 100755 --- a/azalea-brigadier/src/tree/mod.rs +++ b/azalea-brigadier/src/tree/mod.rs @@ -31,7 +31,7 @@ pub struct CommandNode<S> { pub arguments: HashMap<String, Arc<RwLock<CommandNode<S>>>>, pub command: Command<S>, - pub requirement: Arc<dyn Fn(Arc<S>) -> bool + Send + Sync>, + pub requirement: Arc<dyn Fn(&S) -> bool + Send + Sync>, pub redirect: Option<Arc<RwLock<CommandNode<S>>>>, pub forks: bool, pub modifier: Option<Arc<RedirectModifier<S>>>, @@ -97,7 +97,7 @@ impl<S> CommandNode<S> { } } - pub fn can_use(&self, source: Arc<S>) -> bool { + pub fn can_use(&self, source: &S) -> bool { (self.requirement)(source) } diff --git a/azalea-brigadier/tests/command_dispatcher_usages_test.rs b/azalea-brigadier/tests/command_dispatcher_usages_test.rs index d7baff89..0464dea7 100755 --- a/azalea-brigadier/tests/command_dispatcher_usages_test.rs +++ b/azalea-brigadier/tests/command_dispatcher_usages_test.rs @@ -81,21 +81,21 @@ fn get(subject: &CommandDispatcher<()>, command: &str) -> Arc<RwLock<CommandNode #[test] fn test_all_usage_no_commands() { let subject = CommandDispatcher::<()>::new(); - let results = subject.get_all_usage(&subject.root.read(), Arc::new(()), true); + let results = subject.get_all_usage(&subject.root.read(), &(), true); assert!(results.is_empty()); } #[test] fn test_smart_usage_no_commands() { let subject = CommandDispatcher::<()>::new(); - let results = subject.get_smart_usage(&subject.root.read(), Arc::new(())); + let results = subject.get_smart_usage(&subject.root.read(), &()); assert!(results.is_empty()); } #[test] fn test_all_usage_root() { let subject = setup(); - let results = subject.get_all_usage(&subject.root.read(), Arc::new(()), true); + let results = subject.get_all_usage(&subject.root.read(), &(), true); let actual = results.into_iter().collect::<HashSet<_>>(); let expected = vec![ @@ -112,7 +112,7 @@ fn test_all_usage_root() { #[test] fn test_smart_usage_root() { let subject = setup(); - let results = subject.get_smart_usage(&subject.root.read(), Arc::new(())); + let results = subject.get_smart_usage(&subject.root.read(), &()); let actual = results .into_iter() |
