mirror of
https://github.com/mamoe/mirai.git
synced 2025-01-10 18:40:15 +08:00
CommandParameter optionality and UserDefinedType
This commit is contained in:
parent
86c3b18bca
commit
ccc9128023
@ -31,16 +31,18 @@ public interface CommandSignatureVariant {
|
|||||||
@ExperimentalCommandDescriptors
|
@ExperimentalCommandDescriptors
|
||||||
public interface ICommandParameter<T : Any?> {
|
public interface ICommandParameter<T : Any?> {
|
||||||
public val name: String
|
public val name: String
|
||||||
public val type: KType
|
|
||||||
|
/**
|
||||||
|
* If [isOptional] is `false`, [defaultValue] is always `null`.
|
||||||
|
* Otherwise [defaultValue] may be `null` iff [T] is nullable.
|
||||||
|
*/
|
||||||
public val defaultValue: T?
|
public val defaultValue: T?
|
||||||
|
public val isOptional: Boolean
|
||||||
|
|
||||||
public companion object {
|
/**
|
||||||
@get:JvmStatic
|
* Reified type of [T]
|
||||||
@ExperimentalCommandDescriptors
|
*/
|
||||||
public val ICommandParameter<*>.isOptional: Boolean
|
public val type: KType
|
||||||
get() = this.defaultValue != null
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ExperimentalCommandDescriptors
|
@ExperimentalCommandDescriptors
|
||||||
@ -54,9 +56,10 @@ public sealed class CommandValueParameter<T> : ICommandParameter<T> {
|
|||||||
|
|
||||||
public class StringConstant(
|
public class StringConstant(
|
||||||
public override val name: String,
|
public override val name: String,
|
||||||
public override val defaultValue: String,
|
|
||||||
) : CommandValueParameter<String>() {
|
) : CommandValueParameter<String>() {
|
||||||
override val type: KType get() = STRING_TYPE
|
public override val type: KType get() = STRING_TYPE
|
||||||
|
public override val defaultValue: Nothing? get() = null
|
||||||
|
public override val isOptional: Boolean get() = false
|
||||||
|
|
||||||
private companion object {
|
private companion object {
|
||||||
@OptIn(ExperimentalStdlibApi::class)
|
@OptIn(ExperimentalStdlibApi::class)
|
||||||
@ -64,6 +67,27 @@ public sealed class CommandValueParameter<T> : ICommandParameter<T> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class UserDefinedType<T>(
|
||||||
|
public override val name: String,
|
||||||
|
public override val defaultValue: T?,
|
||||||
|
public override val isOptional: Boolean,
|
||||||
|
public override val type: KType,
|
||||||
|
) : CommandValueParameter<T>() {
|
||||||
|
public companion object {
|
||||||
|
@JvmStatic
|
||||||
|
public inline fun <reified T : Any> createOptional(name: String, defaultValue: T): UserDefinedType<T> {
|
||||||
|
@OptIn(ExperimentalStdlibApi::class)
|
||||||
|
return UserDefinedType(name, defaultValue, true, typeOf<T>())
|
||||||
|
}
|
||||||
|
|
||||||
|
@JvmStatic
|
||||||
|
public inline fun <reified T : Any> createRequired(name: String): UserDefinedType<T> {
|
||||||
|
@OptIn(ExperimentalStdlibApi::class)
|
||||||
|
return UserDefinedType(name, null, false, typeOf<T>())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Extended by [CommandValueArgumentParser]
|
* Extended by [CommandValueArgumentParser]
|
||||||
*/
|
*/
|
||||||
|
@ -14,8 +14,6 @@ package net.mamoe.mirai.console.command.parse
|
|||||||
import net.mamoe.mirai.console.command.Command
|
import net.mamoe.mirai.console.command.Command
|
||||||
import net.mamoe.mirai.console.command.CommandSender
|
import net.mamoe.mirai.console.command.CommandSender
|
||||||
import net.mamoe.mirai.console.command.descriptor.ExperimentalCommandDescriptors
|
import net.mamoe.mirai.console.command.descriptor.ExperimentalCommandDescriptors
|
||||||
import net.mamoe.mirai.console.command.resolve.CommandCallResolver
|
|
||||||
import net.mamoe.mirai.console.util.ConsoleExperimentalApi
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Unresolved [CommandCall].
|
* Unresolved [CommandCall].
|
||||||
@ -33,10 +31,11 @@ public interface CommandCall {
|
|||||||
* Explicit value arguments
|
* Explicit value arguments
|
||||||
*/
|
*/
|
||||||
public val valueArguments: List<CommandValueArgument>
|
public val valueArguments: List<CommandValueArgument>
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
@ExperimentalCommandDescriptors
|
||||||
* Custom data for [CommandCallResolver]
|
public class CommandCallImpl(
|
||||||
*/
|
override val caller: CommandSender,
|
||||||
@ConsoleExperimentalApi
|
override val calleeName: String,
|
||||||
public val customData: Map<Any, Any>
|
override val valueArguments: List<CommandValueArgument>,
|
||||||
}
|
) : CommandCall
|
@ -15,7 +15,7 @@ import net.mamoe.mirai.console.extension.AbstractExtensionPoint
|
|||||||
import net.mamoe.mirai.console.extension.InstanceExtension
|
import net.mamoe.mirai.console.extension.InstanceExtension
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The resolver for a [CommandCall]
|
* The provider of [CommandCallParser]
|
||||||
*/
|
*/
|
||||||
@ExperimentalCommandDescriptors
|
@ExperimentalCommandDescriptors
|
||||||
public interface CommandCallParserProvider : InstanceExtension<CommandCallParser> {
|
public interface CommandCallParserProvider : InstanceExtension<CommandCallParser> {
|
||||||
|
Loading…
Reference in New Issue
Block a user