aboutsummaryrefslogtreecommitdiff
path: root/azalea-brigadier/src/arguments
diff options
context:
space:
mode:
authorUbuntu <github@matdoes.dev>2022-01-12 00:40:43 +0000
committerUbuntu <github@matdoes.dev>2022-01-12 00:40:43 +0000
commit270507736af57aae6801dc9eb3c3132139d0d07b (patch)
treea8fa1d1b8d038eb9d7e2061342026d23ddbd9027 /azalea-brigadier/src/arguments
parentcc4fe62fc82842e0bde628437a45d55c6a82f1f3 (diff)
downloadazalea-drasl-270507736af57aae6801dc9eb3c3132139d0d07b.tar.xz
a
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.rs1
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