aboutsummaryrefslogtreecommitdiff
path: root/azalea-brigadier/src/tree/command_node.rs
diff options
context:
space:
mode:
Diffstat (limited to 'azalea-brigadier/src/tree/command_node.rs')
-rw-r--r--azalea-brigadier/src/tree/command_node.rs52
1 files changed, 52 insertions, 0 deletions
diff --git a/azalea-brigadier/src/tree/command_node.rs b/azalea-brigadier/src/tree/command_node.rs
index e69de29b..286820b9 100644
--- a/azalea-brigadier/src/tree/command_node.rs
+++ b/azalea-brigadier/src/tree/command_node.rs
@@ -0,0 +1,52 @@
+use std::collections::HashMap;
+
+use crate::{
+ builder::argument_builder::ArgumentBuilder,
+ command::Command,
+ context::{command_context::CommandContext, command_context_builder::CommandContextBuilder},
+ exceptions::command_syntax_exception::CommandSyntaxException,
+ redirect_modifier::RedirectModifier,
+ string_reader::StringReader,
+ suggestion::{suggestions::Suggestions, suggestions_builder::SuggestionsBuilder},
+};
+
+use super::{argument_command_node::ArgumentCommandNode, literal_command_node::LiteralCommandNode};
+
+pub struct BaseCommandNode<S> {
+ // private final Map<String, CommandNode<S>> children = new LinkedHashMap<>();
+ // private final Map<String, LiteralCommandNode<S>> literals = new LinkedHashMap<>();
+ // private final Map<String, ArgumentCommandNode<S, ?>> arguments = new LinkedHashMap<>();
+ // private final Predicate<S> requirement;
+ // private final CommandNode<S> redirect;
+ // private final RedirectModifier<S> modifier;
+ // private final boolean forks;
+ // private Command<S> command;
+ children: HashMap<String, dyn CommandNode<S>>,
+ literals: HashMap<String, LiteralCommandNode<S>>,
+ arguments: HashMap<String, ArgumentCommandNode<S, _>>,
+ requirement: Option<dyn Fn(&S) -> bool>,
+ redirect: Option<dyn CommandNode<S>>,
+ modifier: Option<dyn RedirectModifier<S>>,
+ forks: bool,
+ command: Option<dyn Command<S>>,
+}
+
+impl<S> BaseCommandNode<S> {}
+
+pub trait CommandNode<S> {
+ fn name(&self) -> &str;
+ fn usage_text(&self) -> &str;
+ fn parse(
+ &self,
+ reader: StringReader,
+ context_builder: CommandContextBuilder<S>,
+ ) -> Result<(), CommandSyntaxException>;
+ fn list_suggestions(
+ &self,
+ context: CommandContext<S>,
+ builder: SuggestionsBuilder,
+ ) -> Result<Suggestions, CommandSyntaxException>;
+ fn is_valid_input(&self, input: &str) -> bool;
+ fn create_builder<T>(&self) -> dyn ArgumentBuilder<S, T>;
+ fn get_examples(&self) -> Vec<String>;
+}