Files
cli.kt/src/commonMain/kotlin/com/infendro/cli/argument/Boolean.kt
Infendro a0f2155b0c
All checks were successful
/ publish (push) Successful in 2m52s
initial commit
2025-07-12 20:15:32 +02:00

85 lines
1.8 KiB
Kotlin

package com.infendro.cli.argument
import com.infendro.cli.Command
private object BooleanParser : 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) }