diff options
| author | mat <git@matdoes.dev> | 2023-10-12 22:01:15 -0500 |
|---|---|---|
| committer | mat <git@matdoes.dev> | 2023-10-12 22:01:15 -0500 |
| commit | 79ad1e93bf6ce2b7c2da6925a7c85b33bb76f154 (patch) | |
| tree | 19004abf51cb19eb3b5cc13c61d670889cb228a0 /azalea-brigadier/src/arguments | |
| parent | f505ace721d4c214cd32143febd0a066b6b95ce5 (diff) | |
| download | azalea-drasl-79ad1e93bf6ce2b7c2da6925a7c85b33bb76f154.tar.xz | |
brigadier suggestions
closes #109
Diffstat (limited to 'azalea-brigadier/src/arguments')
7 files changed, 70 insertions, 2 deletions
diff --git a/azalea-brigadier/src/arguments/argument_type.rs b/azalea-brigadier/src/arguments/argument_type.rs index f44233e1..d7bfa7d6 100755 --- a/azalea-brigadier/src/arguments/argument_type.rs +++ b/azalea-brigadier/src/arguments/argument_type.rs @@ -1,7 +1,19 @@ use std::{any::Any, sync::Arc}; -use crate::{exceptions::CommandSyntaxException, string_reader::StringReader}; +use crate::{ + exceptions::CommandSyntaxException, + string_reader::StringReader, + suggestion::{Suggestions, SuggestionsBuilder}, +}; pub trait ArgumentType { fn parse(&self, reader: &mut StringReader) -> Result<Arc<dyn Any>, CommandSyntaxException>; + + fn list_suggestions(&self, _builder: SuggestionsBuilder) -> Suggestions { + Suggestions::default() + } + + fn examples(&self) -> Vec<String> { + vec![] + } } diff --git a/azalea-brigadier/src/arguments/bool_argument_type.rs b/azalea-brigadier/src/arguments/bool_argument_type.rs index 2e348c7b..a73a9da5 100644 --- a/azalea-brigadier/src/arguments/bool_argument_type.rs +++ b/azalea-brigadier/src/arguments/bool_argument_type.rs @@ -1,7 +1,10 @@ use std::{any::Any, sync::Arc}; use crate::{ - context::CommandContext, exceptions::CommandSyntaxException, string_reader::StringReader, + context::CommandContext, + exceptions::CommandSyntaxException, + string_reader::StringReader, + suggestion::{Suggestions, SuggestionsBuilder}, }; use super::ArgumentType; @@ -13,6 +16,20 @@ impl ArgumentType for Boolean { fn parse(&self, reader: &mut StringReader) -> Result<Arc<dyn Any>, CommandSyntaxException> { Ok(Arc::new(reader.read_boolean()?)) } + + fn list_suggestions(&self, mut builder: SuggestionsBuilder) -> Suggestions { + if "true".starts_with(builder.remaining_lowercase()) { + builder = builder.suggest("true"); + } + if "false".starts_with(builder.remaining_lowercase()) { + builder = builder.suggest("false"); + } + builder.build() + } + + fn examples(&self) -> Vec<String> { + vec!["true".to_string(), "false".to_string()] + } } pub fn bool() -> impl ArgumentType { diff --git a/azalea-brigadier/src/arguments/double_argument_type.rs b/azalea-brigadier/src/arguments/double_argument_type.rs index 9502a680..ea99f1cf 100644 --- a/azalea-brigadier/src/arguments/double_argument_type.rs +++ b/azalea-brigadier/src/arguments/double_argument_type.rs @@ -40,6 +40,13 @@ impl ArgumentType for Double { } Ok(Arc::new(result)) } + + fn examples(&self) -> Vec<String> { + vec!["0", "1.2", ".5", "-1", "-.5", "-1234.56"] + .into_iter() + .map(|s| s.to_string()) + .collect() + } } pub fn double() -> impl ArgumentType { diff --git a/azalea-brigadier/src/arguments/float_argument_type.rs b/azalea-brigadier/src/arguments/float_argument_type.rs index a2831a08..2333499a 100644 --- a/azalea-brigadier/src/arguments/float_argument_type.rs +++ b/azalea-brigadier/src/arguments/float_argument_type.rs @@ -40,6 +40,13 @@ impl ArgumentType for Float { } Ok(Arc::new(result)) } + + fn examples(&self) -> Vec<String> { + vec!["0", "1.2", ".5", "-1", "-.5", "-1234.56"] + .into_iter() + .map(|s| s.to_string()) + .collect() + } } pub fn float() -> impl ArgumentType { diff --git a/azalea-brigadier/src/arguments/integer_argument_type.rs b/azalea-brigadier/src/arguments/integer_argument_type.rs index a31a6e70..cc4755ee 100644 --- a/azalea-brigadier/src/arguments/integer_argument_type.rs +++ b/azalea-brigadier/src/arguments/integer_argument_type.rs @@ -40,6 +40,13 @@ impl ArgumentType for Integer { } Ok(Arc::new(result)) } + + fn examples(&self) -> Vec<String> { + vec!["0", "123", "-123"] + .into_iter() + .map(|s| s.to_string()) + .collect() + } } pub fn integer() -> impl ArgumentType { diff --git a/azalea-brigadier/src/arguments/long_argument_type.rs b/azalea-brigadier/src/arguments/long_argument_type.rs index d557881a..4e36abee 100644 --- a/azalea-brigadier/src/arguments/long_argument_type.rs +++ b/azalea-brigadier/src/arguments/long_argument_type.rs @@ -40,6 +40,13 @@ impl ArgumentType for Long { } Ok(Arc::new(result)) } + + fn examples(&self) -> Vec<String> { + vec!["0", "123", "-123"] + .into_iter() + .map(|s| s.to_string()) + .collect() + } } pub fn long() -> impl ArgumentType { diff --git a/azalea-brigadier/src/arguments/string_argument_type.rs b/azalea-brigadier/src/arguments/string_argument_type.rs index 9fd70d13..d38fbc79 100644 --- a/azalea-brigadier/src/arguments/string_argument_type.rs +++ b/azalea-brigadier/src/arguments/string_argument_type.rs @@ -29,6 +29,17 @@ impl ArgumentType for StringArgument { }; Ok(Arc::new(result)) } + + fn examples(&self) -> Vec<String> { + match self { + StringArgument::SingleWord => vec!["word", "words_with_underscores"], + StringArgument::QuotablePhrase => vec!["\"quoted phrase\"", "word", "\"\""], + StringArgument::GreedyPhrase => vec!["word", "words with spaces", "\"and symbols\""], + } + .into_iter() + .map(|s| s.to_string()) + .collect() + } } /// Match up until the next space. |
