diff options
| author | Ubuntu <github@matdoes.dev> | 2022-01-12 00:40:43 +0000 |
|---|---|---|
| committer | Ubuntu <github@matdoes.dev> | 2022-01-12 00:40:43 +0000 |
| commit | 270507736af57aae6801dc9eb3c3132139d0d07b (patch) | |
| tree | a8fa1d1b8d038eb9d7e2061342026d23ddbd9027 /azalea-brigadier/src/arguments | |
| parent | cc4fe62fc82842e0bde628437a45d55c6a82f1f3 (diff) | |
| download | azalea-drasl-270507736af57aae6801dc9eb3c3132139d0d07b.tar.xz | |
a
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 | 1 |
2 files changed, 24 insertions, 5 deletions
diff --git a/azalea-brigadier/src/arguments/argument_type.rs b/azalea-brigadier/src/arguments/argument_type.rs index 46026735..890cdea0 100644 --- a/azalea-brigadier/src/arguments/argument_type.rs +++ b/azalea-brigadier/src/arguments/argument_type.rs @@ -5,11 +5,19 @@ use crate::{ string_reader::StringReader, suggestion::{suggestions::Suggestions, suggestions_builder::SuggestionsBuilder}, }; +use dyn_clonable::*; -pub trait Types { +#[clonable] +// This should be applied to an Enum +pub trait Types: Clone { fn bool(value: bool) -> Self where Self: Sized; + + /// Get the less specific ArgumentType from this enum + fn inner<T>(&self) -> Box<dyn ArgumentType<T>> + where + Self: Sized; } /* @@ -25,12 +33,21 @@ enum BrigadierTypes { Entity(EntityArgumentType) } + +impl Types for BrigadierTypes { + fn inner(&self) -> dyn ArgumentType<dyn Types> { + match self { + Bool(t) => t, + Entity(t) => t + } + } +} */ -pub trait ArgumentType<T> +#[clonable] +pub trait ArgumentType<T: ?Sized>: Clone where - Self: Sized, - T: Types + ?Sized, + T: Types, { // T parse(StringReader reader) throws CommandSyntaxException; @@ -42,7 +59,7 @@ where // return Collections.emptyList(); // } - fn parse(&self, reader: &mut StringReader) -> Result<T, CommandSyntaxException>; + fn parse(&self, reader: &mut StringReader) -> Result<Box<T>, CommandSyntaxException>; fn list_suggestions<S>( &self, @@ -50,6 +67,7 @@ where builder: &mut SuggestionsBuilder, ) -> Result<Suggestions, CommandSyntaxException> where + Self: Sized, S: Sized, T: Sized; diff --git a/azalea-brigadier/src/arguments/bool_argument_type.rs b/azalea-brigadier/src/arguments/bool_argument_type.rs index 1237caa0..b04488c1 100644 --- a/azalea-brigadier/src/arguments/bool_argument_type.rs +++ b/azalea-brigadier/src/arguments/bool_argument_type.rs @@ -7,6 +7,7 @@ use crate::{ use super::argument_type::{ArgumentType, Types}; +#[derive(Clone)] pub struct BoolArgumentType {} impl<T> ArgumentType<T> for BoolArgumentType |
