Skip to content

Commit

Permalink
feat(arguments): add type to ListArgument & fix EnumArgument not bein…
Browse files Browse the repository at this point in the history
…g in ArgumentHelper#getArgumentType
  • Loading branch information
StillLutto committed Dec 9, 2024
1 parent dfaa322 commit c8c2bd4
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -73,14 +73,19 @@ open class ArgumentHandler {
fun addBooleanArgument(name: String): BooleanArgument =
addArgument { BooleanArgument(base, name) }

fun <T> addListArgument(name: String, list: List<T>, parse: (String) -> T): ListArgument<T> =
addArgument { ListArgument(base, name, list, parse = parse) }
fun <T> addListArgument(
name: String,
list: List<T>,
stringifier: (T) -> String,
parse: (String) -> T,
type: AbstractStellarArgument<*> = StringArgument(base, name, StringType.SINGLE_WORD)
): ListArgument<T> = addArgument { ListArgument(base, name, list, stringifier, parse, type) }

fun addStringListArgument(name: String, list: List<String>): ListArgument<String> =
addArgument { ListArgument(base, name, list) { it } }
fun addStringListArgument(name: String, list: List<String>, type: StringType): ListArgument<String> =
addArgument { ListArgument(base, name, list, { it }, { it }, StringArgument(base, name, type)) }

fun addUUIDListArgument(name: String, list: List<UUID>): ListArgument<UUID> =
addArgument { ListArgument(base, name, list) { UUID.fromString(it) } }
addArgument { ListArgument(base, name, list, parse = { UUID.fromString(it) }, type = UUIDArgument(base, name) ) }

inline fun <reified T : Enum<T>> addEnumArgument(name: String): EnumArgument<T> =
addArgument { EnumArgument<T>(base, name, T::class) }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ class EnumArgument<T : Enum<T>>(
}
}
) : AbstractStellarArgument<EnumArgument<T>>(parent, name) {

fun getStringList(): List<String> = enum.java.enumConstants.map(stringifier)
fun valueOf(name: String): Enum<T>? =
try {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,16 @@ open class ListArgument<T>(
name: String,
val list: () -> List<T>,
val stringifier: (T) -> String = { it.toString() },
val parse: (String) -> T?
val parse: (String) -> T?,
val type: AbstractStellarArgument<*>
) : AbstractStellarArgument<ListArgument<T>>(parent, name) {

constructor(parent: AbstractStellarCommand<*>,
name: String,
list: List<T>,
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<String> = list().map(stringifier)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,8 @@ object ArgumentHelper {

fun <T : AbstractStellarArgument<*>> 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)
Expand Down

0 comments on commit c8c2bd4

Please sign in to comment.