aboutsummaryrefslogtreecommitdiff
path: root/azalea-brigadier/src/arguments
diff options
context:
space:
mode:
authormat <github@matdoes.dev>2022-01-10 20:29:46 -0600
committermat <github@matdoes.dev>2022-01-10 20:29:46 -0600
commit60b129b3a62b66dd389d1775892405fe735b9540 (patch)
treeb6d977c8256ffbda97c3822e571ef7c65003750b /azalea-brigadier/src/arguments
parentcb4d871f6f56a484dc87151ea3ad55f7e3bbed97 (diff)
downloadazalea-drasl-60b129b3a62b66dd389d1775892405fe735b9540.tar.xz
progress
Diffstat (limited to 'azalea-brigadier/src/arguments')
-rw-r--r--azalea-brigadier/src/arguments/argument_type.rs28
-rw-r--r--azalea-brigadier/src/arguments/bool_argument_type.rs49
2 files changed, 62 insertions, 15 deletions
diff --git a/azalea-brigadier/src/arguments/argument_type.rs b/azalea-brigadier/src/arguments/argument_type.rs
index f5ca457b..107b1cbf 100644
--- a/azalea-brigadier/src/arguments/argument_type.rs
+++ b/azalea-brigadier/src/arguments/argument_type.rs
@@ -6,27 +6,30 @@ use crate::{
suggestion::{suggestions::Suggestions, suggestions_builder::SuggestionsBuilder},
};
-pub enum DefaultArguments {
- Bool(BoolArgumentType),
+pub trait Types {
+ fn bool(value: bool) -> Self;
}
/*
-define_arguments! {
+#[derive(Types)]
+enum BrigadierTypes {
Entity(EntityArgumentType)
}
===
-enum CustomArguments {
+enum BrigadierTypes {
+ Bool(BoolArgumentType)
+
Entity(EntityArgumentType)
}
-enum BrigadierArguments {
- BuiltIn(DefaultArguments)
- Custom(CustomArguments)
-}
*/
-pub trait ArgumentType<T> {
+pub trait ArgumentType<T>
+where
+ Self: Sized,
+ T: Types,
+{
// T parse(StringReader reader) throws CommandSyntaxException;
// default <S> CompletableFuture<Suggestions> listSuggestions(final CommandContext<S> context, final SuggestionsBuilder builder) {
@@ -41,9 +44,12 @@ pub trait ArgumentType<T> {
fn list_suggestions<S>(
&self,
- context: &CommandContext<S>,
+ context: &CommandContext<S, T>,
builder: &mut SuggestionsBuilder,
- ) -> Result<Suggestions, CommandSyntaxException>;
+ ) -> Result<Suggestions, CommandSyntaxException>
+ where
+ S: Sized,
+ T: Sized;
fn get_examples(&self) -> Vec<String>;
}
diff --git a/azalea-brigadier/src/arguments/bool_argument_type.rs b/azalea-brigadier/src/arguments/bool_argument_type.rs
index 9bdf42e5..dc2c6896 100644
--- a/azalea-brigadier/src/arguments/bool_argument_type.rs
+++ b/azalea-brigadier/src/arguments/bool_argument_type.rs
@@ -1,10 +1,51 @@
-use crate::context::command_context::CommandContext;
+use crate::{
+ context::command_context::CommandContext,
+ exceptions::command_syntax_exception::CommandSyntaxException,
+ string_reader::StringReader,
+ suggestion::{suggestions::Suggestions, suggestions_builder::SuggestionsBuilder},
+};
-use super::argument_type::ArgumentType;
+use super::argument_type::{ArgumentType, Types};
pub struct BoolArgumentType {}
-impl ArgumentType<bool> for BoolArgumentType {}
+impl<T> ArgumentType<T> for BoolArgumentType
+where
+ T: Types,
+{
+ fn parse(&self, reader: &mut StringReader) -> Result<T, CommandSyntaxException> {
+ Ok(T::bool(reader.read_boolean()?))
+ }
+
+ fn list_suggestions<S>(
+ &self,
+ context: &CommandContext<S, T>,
+ builder: &mut SuggestionsBuilder,
+ ) -> Result<Suggestions, CommandSyntaxException>
+ where
+ S: Sized,
+ T: Sized,
+ {
+ // if ("true".startsWith(builder.getRemainingLowerCase())) {
+ // builder.suggest("true");
+ // }
+ // if ("false".startsWith(builder.getRemainingLowerCase())) {
+ // builder.suggest("false");
+ // }
+ // return builder.buildFuture();
+ if "true".starts_with(builder.get_remaining_lower_case()) {
+ builder.suggest("true");
+ }
+ if "false".starts_with(builder.get_remaining_lower_case()) {
+ builder.suggest("false");
+ }
+ Ok(builder.build_future())
+ }
+
+ fn get_examples(&self) -> Vec<String> {
+ vec![]
+ }
+}
impl BoolArgumentType {
const EXAMPLES: &'static [&'static str] = &["true", "false"];
@@ -13,7 +54,7 @@ impl BoolArgumentType {
Self {}
}
- fn get_bool<S>(context: CommandContext<S>, name: String) {
+ fn get_bool<S, T>(context: CommandContext<S, T>, name: String) {
context.get_argument::<bool>(name)
}
}