package com.infendro.cli.argument import com.infendro.cli.command.Command private object BooleanParser : Argument.Parser { override fun parse( text: String?, ): Boolean { return text == null || text.toBooleanStrict() } } class BooleanArgument( override val name: String, ) : Argument.Single() { override val parser: Parser 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() { override val parser: Parser 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() { override val parser: Parser 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() { override val parser: Parser 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) }