package com.infendro.cli.command import com.infendro.cli.argument.Argument import kotlin.reflect.KProperty class Execution( val commands: List, val arguments: List, ) { 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 Argument.Single.getValue( thisRef: Any?, property: KProperty<*>, ): T { return arguments .single { it.name == name } .let { parser.parse(it.value) } } operator fun Argument.SingleOrElse.getValue( thisRef: Any?, property: KProperty<*>, ): T { return arguments .singleOrNull { it.name == name } ?.let { parser.parse(it.value) } ?: other } operator fun Argument.SingleOrNull.getValue( thisRef: Any?, property: KProperty<*>, ): T? { return arguments .singleOrNull { it.name == name } ?.let { parser.parse(it.value) } } operator fun Argument.Multiple.getValue( thisRef: Any?, property: KProperty<*>, ): List { return arguments .filter { it.name == name } .map { parser.parse(it.value) } } }