diff --git a/src/commonMain/kotlin/com/infendro/cli/command/Argument.kt b/src/commonMain/kotlin/com/infendro/cli/command/Argument.kt index 75c3b41..c942c2d 100644 --- a/src/commonMain/kotlin/com/infendro/cli/command/Argument.kt +++ b/src/commonMain/kotlin/com/infendro/cli/command/Argument.kt @@ -15,8 +15,8 @@ sealed class Argument( } class OrElse( - val other: T, parser: Parser, + val other: T, ) : Argument(parser) { override val required: Boolean get() = false @@ -41,7 +41,7 @@ sealed class Argument( Required(StringParser) fun stringOrElse(other: String) = - OrElse(other, StringParser) + OrElse(StringParser, other) fun stringOrNull() = OrNull(StringParser) @@ -53,7 +53,7 @@ sealed class Argument( Required(IntParser) fun intOrElse(other: Int) = - OrElse(other, IntParser) + OrElse(IntParser, other) fun intOrNull() = OrNull(IntParser) @@ -61,11 +61,47 @@ sealed class Argument( fun ints() = Variable(IntParser) + fun long() = + Required(LongParser) + + fun longOrElse(other: Long) = + OrElse(LongParser, other) + + fun longOrNull() = + OrNull(LongParser) + + fun longs() = + Variable(LongParser) + + fun float() = + Required(FloatParser) + + fun floatOrElse(other: Float) = + OrElse(FloatParser, other) + + fun floatOrNull() = + OrNull(FloatParser) + + fun floats() = + Variable(FloatParser) + + fun double() = + Required(DoubleParser) + + fun doubleOrElse(other: Double) = + OrElse(DoubleParser, other) + + fun doubleOrNull() = + OrNull(DoubleParser) + + fun doubles() = + Variable(DoubleParser) + fun boolean() = Required(BooleanParser) fun booleanOrElse(other: Boolean) = - OrElse(other, BooleanParser) + OrElse(BooleanParser, other) fun booleanOrNull() = OrNull(BooleanParser) @@ -77,12 +113,24 @@ sealed class Argument( Required(enumParser()) inline fun > enumOrElse(other: T) = - OrElse(other, enumParser()) + OrElse(enumParser(), other) inline fun > enumOrNull() = OrNull(enumParser()) inline fun > enums() = Variable(enumParser()) + + fun regex() = + Required(RegexParser) + + fun regexOrElse(other: Regex) = + OrElse(RegexParser, other) + + fun regexOrNull() = + OrNull(RegexParser) + + fun regexs() = + Variable(RegexParser) } } diff --git a/src/commonMain/kotlin/com/infendro/cli/command/Option.kt b/src/commonMain/kotlin/com/infendro/cli/command/Option.kt index 37e6eac..bea4324 100644 --- a/src/commonMain/kotlin/com/infendro/cli/command/Option.kt +++ b/src/commonMain/kotlin/com/infendro/cli/command/Option.kt @@ -104,6 +104,42 @@ sealed class Option( fun ints(vararg names: String) = Variable(IntParser, names.asList()) + fun long(vararg names: String) = + Required(LongParser, names.asList()) + + fun longOrElse(vararg names: String, other: Long) = + OrElse(LongParser, names.asList(), other) + + fun longOrNull(vararg names: String) = + OrNull(LongParser, names.asList()) + + fun longs(vararg names: String) = + Variable(LongParser, names.asList()) + + fun float(vararg names: String) = + Required(FloatParser, names.asList()) + + fun floatOrElse(vararg names: String, other: Float) = + OrElse(FloatParser, names.asList(), other) + + fun floatOrNull(vararg names: String) = + OrNull(FloatParser, names.asList()) + + fun floats(vararg names: String) = + Variable(FloatParser, names.asList()) + + fun double(vararg names: String) = + Required(DoubleParser, names.asList()) + + fun doubleOrElse(vararg names: String, other: Double) = + OrElse(DoubleParser, names.asList(), other) + + fun doubleOrNull(vararg names: String) = + OrNull(DoubleParser, names.asList()) + + fun doubles(vararg names: String) = + Variable(DoubleParser, names.asList()) + fun boolean(vararg names: String) = Required(BooleanParser, true, names.asList()) @@ -127,5 +163,17 @@ sealed class Option( inline fun > enums(vararg names: String) = Variable(enumParser(), names.asList()) + + fun regex(vararg names: String) = + Required(RegexParser, names.asList()) + + fun regexOrElse(vararg names: String, other: Regex) = + OrElse(RegexParser, names.asList(), other) + + fun regexOrNull(vararg names: String) = + OrNull(RegexParser, names.asList()) + + fun regexs(vararg names: String) = + Variable(RegexParser, names.asList()) } } diff --git a/src/commonMain/kotlin/com/infendro/cli/parser/DoubleParser.kt b/src/commonMain/kotlin/com/infendro/cli/parser/DoubleParser.kt new file mode 100644 index 0000000..0efcf27 --- /dev/null +++ b/src/commonMain/kotlin/com/infendro/cli/parser/DoubleParser.kt @@ -0,0 +1,11 @@ +package com.infendro.cli.parser + +import com.infendro.cli.exception.run.ParseException + +object DoubleParser : Parser { + override fun parse(text: String): Double = try { + text.toDouble() + } catch (_: Exception) { + throw ParseException(text, "Double") + } +} diff --git a/src/commonMain/kotlin/com/infendro/cli/parser/FloatParser.kt b/src/commonMain/kotlin/com/infendro/cli/parser/FloatParser.kt new file mode 100644 index 0000000..28434c3 --- /dev/null +++ b/src/commonMain/kotlin/com/infendro/cli/parser/FloatParser.kt @@ -0,0 +1,11 @@ +package com.infendro.cli.parser + +import com.infendro.cli.exception.run.ParseException + +object FloatParser : Parser { + override fun parse(text: String): Float = try { + text.toFloat() + } catch (_: Exception) { + throw ParseException(text, "Float") + } +} diff --git a/src/commonMain/kotlin/com/infendro/cli/parser/LongParser.kt b/src/commonMain/kotlin/com/infendro/cli/parser/LongParser.kt new file mode 100644 index 0000000..8072f83 --- /dev/null +++ b/src/commonMain/kotlin/com/infendro/cli/parser/LongParser.kt @@ -0,0 +1,11 @@ +package com.infendro.cli.parser + +import com.infendro.cli.exception.run.ParseException + +object LongParser : Parser { + override fun parse(text: String): Long = try { + text.toLong() + } catch (_: Exception) { + throw ParseException(text, "Long") + } +} diff --git a/src/commonMain/kotlin/com/infendro/cli/parser/RegexParser.kt b/src/commonMain/kotlin/com/infendro/cli/parser/RegexParser.kt new file mode 100644 index 0000000..098c4c1 --- /dev/null +++ b/src/commonMain/kotlin/com/infendro/cli/parser/RegexParser.kt @@ -0,0 +1,5 @@ +package com.infendro.cli.parser + +object RegexParser : Parser { + override fun parse(text: String) = Regex(text) +} diff --git a/src/commonMain/kotlin/com/infendro/cli/parser/StringParser.kt b/src/commonMain/kotlin/com/infendro/cli/parser/StringParser.kt index 17248d5..c3c6ddc 100644 --- a/src/commonMain/kotlin/com/infendro/cli/parser/StringParser.kt +++ b/src/commonMain/kotlin/com/infendro/cli/parser/StringParser.kt @@ -1,5 +1,5 @@ package com.infendro.cli.parser object StringParser : Parser { - override fun parse(text: String): String = text + override fun parse(text: String) = text }