rename Arguments to Options, implement Arguments

This commit is contained in:
2025-12-31 18:42:22 +01:00
parent 5d363e0f43
commit 74a9324660
36 changed files with 506 additions and 332 deletions

View File

@@ -0,0 +1,93 @@
package com.infendro.cli.command
import com.infendro.cli.exception.build.NoOptionNameException
import com.infendro.cli.parser.BooleanParser
import com.infendro.cli.parser.IntParser
import com.infendro.cli.parser.Parser
import com.infendro.cli.parser.StringParser
sealed class Option<T>(
val names: List<String>,
val parser: Parser<T>,
) {
val name: String
get() = names[0]
abstract val required: Boolean
init {
if (names.isEmpty())
throw NoOptionNameException()
}
class Required<T>(
names: List<String>,
parser: Parser<T>,
) : Option<T>(names, parser) {
override val required: Boolean
get() = true
}
class OrElse<T>(
names: List<String>,
val other: T,
parser: Parser<T>,
) : Option<T>(names, parser) {
override val required: Boolean
get() = false
}
class OrNull<T>(
names: List<String>,
parser: Parser<T>,
) : Option<T>(names, parser) {
override val required: Boolean
get() = false
}
class Variable<T>(
names: List<String>,
parser: Parser<T>,
) : Option<T>(names, parser) {
override val required: Boolean
get() = false
}
companion object {
fun string(vararg names: String) =
Required(names.asList(), StringParser)
fun stringOrElse(vararg names: String, other: String) =
OrElse(names.asList(), other, StringParser)
fun stringOrNull(vararg names: String) =
OrNull(names.asList(), StringParser)
fun strings(vararg names: String) =
Variable(names.asList(), StringParser)
fun int(vararg names: String) =
Required(names.asList(), IntParser)
fun intOrElse(vararg names: String, other: Int) =
OrElse(names.asList(), other, IntParser)
fun intOrNull(vararg names: String) =
OrNull(names.asList(), IntParser)
fun ints(vararg names: String) =
Variable(names.asList(), IntParser)
fun boolean(vararg names: String) =
Required(names.asList(), BooleanParser)
fun booleanOrElse(vararg names: String, other: Boolean) =
OrElse(names.asList(), other, BooleanParser)
fun booleanOrNull(vararg names: String) =
OrNull(names.asList(), BooleanParser)
fun booleans(vararg names: String) =
Variable(names.asList(), BooleanParser)
}
}