Files
cli.kt/src/commonMain/kotlin/com/infendro/cli/command/Execution.kt
2025-08-18 00:25:02 +02:00

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) }
}
}