diff options
| author | mat <github@matdoes.dev> | 2022-01-10 20:29:46 -0600 |
|---|---|---|
| committer | mat <github@matdoes.dev> | 2022-01-10 20:29:46 -0600 |
| commit | 60b129b3a62b66dd389d1775892405fe735b9540 (patch) | |
| tree | b6d977c8256ffbda97c3822e571ef7c65003750b /azalea-brigadier/src/arguments | |
| parent | cb4d871f6f56a484dc87151ea3ad55f7e3bbed97 (diff) | |
| download | azalea-drasl-60b129b3a62b66dd389d1775892405fe735b9540.tar.xz | |
progress
Diffstat (limited to 'azalea-brigadier/src/arguments')
| -rw-r--r-- | azalea-brigadier/src/arguments/argument_type.rs | 28 | ||||
| -rw-r--r-- | azalea-brigadier/src/arguments/bool_argument_type.rs | 49 |
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) } } |
