85 lines
1.8 KiB
Kotlin
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) }
|