63 lines
1.4 KiB
Kotlin
63 lines
1.4 KiB
Kotlin
package com.infendro.cli.command
|
|
|
|
import com.infendro.cli.argument.Argument
|
|
import kotlin.reflect.KProperty
|
|
|
|
class Execution(
|
|
val commands: List<Cmd>,
|
|
val arguments: List<Arg>,
|
|
) {
|
|
class Cmd(
|
|
val name: String,
|
|
)
|
|
|
|
class Arg(
|
|
val name: String,
|
|
val value: String?,
|
|
)
|
|
|
|
operator fun Command.Key.getValue(
|
|
thisRef: Any?,
|
|
property: KProperty<*>,
|
|
): String {
|
|
return commands[index]
|
|
.name
|
|
}
|
|
|
|
operator fun <T> Argument.Single<T>.getValue(
|
|
thisRef: Any?,
|
|
property: KProperty<*>,
|
|
): T {
|
|
return arguments
|
|
.single { it.name == name }
|
|
.let { parser.parse(it.value) }
|
|
}
|
|
|
|
operator fun <T> Argument.SingleOrElse<T>.getValue(
|
|
thisRef: Any?,
|
|
property: KProperty<*>,
|
|
): T {
|
|
return arguments
|
|
.singleOrNull { it.name == name }
|
|
?.let { parser.parse(it.value) }
|
|
?: other
|
|
}
|
|
|
|
operator fun <T> Argument.SingleOrNull<T>.getValue(
|
|
thisRef: Any?,
|
|
property: KProperty<*>,
|
|
): T? {
|
|
return arguments
|
|
.singleOrNull { it.name == name }
|
|
?.let { parser.parse(it.value) }
|
|
}
|
|
|
|
operator fun <T> Argument.Multiple<T>.getValue(
|
|
thisRef: Any?,
|
|
property: KProperty<*>,
|
|
): List<T> {
|
|
return arguments
|
|
.filter { it.name == name }
|
|
.map { parser.parse(it.value) }
|
|
}
|
|
} |