diff --git a/common/src/main/kotlin/com/undefined/stellar/argument/SubCommandHandler.kt b/common/src/main/kotlin/com/undefined/stellar/argument/SubCommandHandler.kt index 6d1f4ea..aff7f8f 100644 --- a/common/src/main/kotlin/com/undefined/stellar/argument/SubCommandHandler.kt +++ b/common/src/main/kotlin/com/undefined/stellar/argument/SubCommandHandler.kt @@ -73,14 +73,19 @@ open class ArgumentHandler { fun addBooleanArgument(name: String): BooleanArgument = addArgument { BooleanArgument(base, name) } - fun addListArgument(name: String, list: List, parse: (String) -> T): ListArgument = - addArgument { ListArgument(base, name, list, parse = parse) } + fun addListArgument( + name: String, + list: List, + stringifier: (T) -> String, + parse: (String) -> T, + type: AbstractStellarArgument<*> = StringArgument(base, name, StringType.SINGLE_WORD) + ): ListArgument = addArgument { ListArgument(base, name, list, stringifier, parse, type) } - fun addStringListArgument(name: String, list: List): ListArgument = - addArgument { ListArgument(base, name, list) { it } } + fun addStringListArgument(name: String, list: List, type: StringType): ListArgument = + addArgument { ListArgument(base, name, list, { it }, { it }, StringArgument(base, name, type)) } fun addUUIDListArgument(name: String, list: List): ListArgument = - addArgument { ListArgument(base, name, list) { UUID.fromString(it) } } + addArgument { ListArgument(base, name, list, parse = { UUID.fromString(it) }, type = UUIDArgument(base, name) ) } inline fun > addEnumArgument(name: String): EnumArgument = addArgument { EnumArgument(base, name, T::class) } diff --git a/common/src/main/kotlin/com/undefined/stellar/argument/types/custom/EnumArgument.kt b/common/src/main/kotlin/com/undefined/stellar/argument/types/custom/EnumArgument.kt index 72f4923..da8f82e 100644 --- a/common/src/main/kotlin/com/undefined/stellar/argument/types/custom/EnumArgument.kt +++ b/common/src/main/kotlin/com/undefined/stellar/argument/types/custom/EnumArgument.kt @@ -19,6 +19,7 @@ class EnumArgument>( } } ) : AbstractStellarArgument>(parent, name) { + fun getStringList(): List = enum.java.enumConstants.map(stringifier) fun valueOf(name: String): Enum? = try { diff --git a/common/src/main/kotlin/com/undefined/stellar/argument/types/custom/ListArgument.kt b/common/src/main/kotlin/com/undefined/stellar/argument/types/custom/ListArgument.kt index 8c0942d..3e13ef9 100644 --- a/common/src/main/kotlin/com/undefined/stellar/argument/types/custom/ListArgument.kt +++ b/common/src/main/kotlin/com/undefined/stellar/argument/types/custom/ListArgument.kt @@ -8,14 +8,16 @@ open class ListArgument( name: String, val list: () -> List, val stringifier: (T) -> String = { it.toString() }, - val parse: (String) -> T? + val parse: (String) -> T?, + val type: AbstractStellarArgument<*> ) : AbstractStellarArgument>(parent, name) { constructor(parent: AbstractStellarCommand<*>, name: String, list: List, stringifier: (T) -> String = { it.toString() }, - parse: (String) -> T?) : this(parent, name, { list }, stringifier, parse) + parse: (String) -> T?, + type: AbstractStellarArgument<*>) : this(parent, name, { list }, stringifier, parse, type) fun getStringList(): List = list().map(stringifier) diff --git a/v1_20_6/src/main/kotlin/com/undefined/stellar/v1_20_6/ArgumentHelper.kt b/v1_20_6/src/main/kotlin/com/undefined/stellar/v1_20_6/ArgumentHelper.kt index 24a6296..076f505 100644 --- a/v1_20_6/src/main/kotlin/com/undefined/stellar/v1_20_6/ArgumentHelper.kt +++ b/v1_20_6/src/main/kotlin/com/undefined/stellar/v1_20_6/ArgumentHelper.kt @@ -111,7 +111,8 @@ object ArgumentHelper { fun > getArgumentType(argument: T): ArgumentType<*> = when (argument) { - is ListArgument<*> -> StringArgumentType.string() + is ListArgument<*> -> getArgumentType(argument.type) + is EnumArgument<*> -> StringArgumentType.word() is CustomArgument<*> -> getArgumentType(argument.type) is StringArgument -> brigadier(argument.type) is IntegerArgument -> IntegerArgumentType.integer(argument.min, argument.max)