Files
cli.kt/src/commonMain/kotlin/com/infendro/cli/argument/Boolean.kt
2025-08-18 00:11:20 +02:00

85 lines
1.9 KiB
Kotlin

package com.infendro.cli.argument
import com.infendro.cli.command.Command
private object BooleanParser : Argument.Parser<Boolean> {
override fun parse(
text: String?,
): Boolean {
return text == null || text.toBooleanStrict()
}
}
class BooleanArgument(
override val name: String,
) : Argument.Single<Boolean>() {
override val parser: Parser<Boolean>
get() = BooleanParser
}
fun boolean(
name: String,
) = BooleanArgument(name)
fun Command.Builder.boolean(
name: String,
) = BooleanArgument(name)
.also { argument(it) }
class BooleanOrElseArgument(
override val name: String,
override val other: Boolean,
) : Argument.SingleOrElse<Boolean>() {
override val parser: Parser<Boolean>
get() = BooleanParser
}
fun booleanOrElse(
name: String,
other: Boolean,
) = BooleanOrElseArgument(name, other)
fun Command.Builder.booleanOrElse(
name: String,
other: Boolean,
) = BooleanOrElseArgument(name, other)
.also { argument(it) }
class BooleanOrNullArgument(
override val name: String,
) : Argument.SingleOrNull<Boolean>() {
override val parser: Parser<Boolean>
get() = BooleanParser
}
fun booleanOrNull(
name: String,
) = BooleanOrNullArgument(name)
fun Command.Builder.booleanOrNull(
name: String,
) = BooleanOrNullArgument(name)
.also { argument(it) }
class BooleansArgument(
override val name: String,
override val min: Int = 0,
override val max: Int = Int.MAX_VALUE,
) : Argument.Multiple<Boolean>() {
override val parser: Parser<Boolean>
get() = BooleanParser
}
fun booleans(
name: String,
min: Int = 0,
max: Int = Int.MAX_VALUE,
) = BooleansArgument(name, min, max)
fun Command.Builder.booleans(
name: String,
min: Int = 0,
max: Int = Int.MAX_VALUE,
) = BooleansArgument(name, min, max)
.also { argument(it) }