implement optional variable argument/option ranges, refactor exception handling
adapt required/optional argument handling implement bounded/unbounded variable argument handling
This commit is contained in:
@@ -1,3 +0,0 @@
|
||||
package com.infendro.cli.exception.run
|
||||
|
||||
abstract class CliException : Exception()
|
||||
@@ -1,8 +0,0 @@
|
||||
package com.infendro.cli.exception.run
|
||||
|
||||
class DuplicateOptionException(
|
||||
val option: String,
|
||||
) : CliException() {
|
||||
override val message: String
|
||||
get() = """duplicate option "$option""""
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
package com.infendro.cli.exception.run
|
||||
|
||||
class ExecuteException(
|
||||
override val message: String,
|
||||
) : CliException()
|
||||
@@ -0,0 +1,18 @@
|
||||
package com.infendro.cli.exception.run
|
||||
|
||||
import com.infendro.cli.command.Argument
|
||||
|
||||
class InvalidArgumentCount(
|
||||
val argument: Argument<*>,
|
||||
val count: Int,
|
||||
) : RunException() {
|
||||
override val message: String
|
||||
get() {
|
||||
val expected = when {
|
||||
argument.min == argument.max -> "${argument.min}"
|
||||
argument.unbounded -> "at least ${argument.min}"
|
||||
else -> "${argument.min} to ${argument.max}"
|
||||
}
|
||||
return """invalid number of values for argument "${argument.name}": expected $expected but found $count"""
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package com.infendro.cli.exception.run
|
||||
|
||||
import com.infendro.cli.command.Option
|
||||
|
||||
class InvalidOptionCount(
|
||||
val option: Option<*>,
|
||||
val count: Int,
|
||||
) : RunException() {
|
||||
override val message: String
|
||||
get() {
|
||||
val expected = when {
|
||||
option.min == option.max -> "${option.min}"
|
||||
option.unbounded -> "at least ${option.min}"
|
||||
else -> "${option.min} to ${option.max}"
|
||||
}
|
||||
return """invalid number of values passed for option "${option.name}": expected $expected but found $count"""
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package com.infendro.cli.exception.run
|
||||
|
||||
import kotlin.reflect.KClass
|
||||
|
||||
class InvalidValue(
|
||||
val value: String,
|
||||
val type: KClass<*>,
|
||||
) : RunException() {
|
||||
override val message: String
|
||||
get() = """"$value" cannot be converted to ${type.simpleName}"""
|
||||
}
|
||||
@@ -1,8 +1,8 @@
|
||||
package com.infendro.cli.exception.run
|
||||
|
||||
class MalformedOptionException(
|
||||
class MalformedOption(
|
||||
val option: String,
|
||||
) : CliException() {
|
||||
) : RunException() {
|
||||
override val message: String
|
||||
get() = """malformed option "$option""""
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
package com.infendro.cli.exception.run
|
||||
|
||||
class MissingArgumentException : CliException() {
|
||||
override val message: String
|
||||
get() = """missing argument"""
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
package com.infendro.cli.exception.run
|
||||
|
||||
class MissingOptionException(
|
||||
val option: String,
|
||||
) : CliException() {
|
||||
override val message: String
|
||||
get() = """missing option "$option""""
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package com.infendro.cli.exception.run
|
||||
|
||||
import com.infendro.cli.command.Option
|
||||
|
||||
class MissingOptionValue(
|
||||
val option: Option<*>,
|
||||
) : RunException() {
|
||||
override val message: String
|
||||
get() = """no value provided for option "${option.name}""""
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
package com.infendro.cli.exception.run
|
||||
|
||||
class MissingOptionValueException(
|
||||
val option: String,
|
||||
) : CliException() {
|
||||
override val message: String
|
||||
get() = """no value provided for option "$option""""
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
package com.infendro.cli.exception.run
|
||||
|
||||
class ParseException(
|
||||
val text: String?,
|
||||
val type: String,
|
||||
) : CliException() {
|
||||
override val message: String
|
||||
get() = """"$text" cannot be converted to $type"""
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package com.infendro.cli.exception.run
|
||||
|
||||
import com.infendro.cli.exception.CliException
|
||||
|
||||
abstract class RunException : CliException()
|
||||
@@ -1,6 +0,0 @@
|
||||
package com.infendro.cli.exception.run
|
||||
|
||||
class TooManyArgumentsException : CliException() {
|
||||
override val message: String
|
||||
get() = """too many arguments"""
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
package com.infendro.cli.exception.run
|
||||
|
||||
class UnexpectedArgument : RunException() {
|
||||
override val message: String
|
||||
get() = """unexpected argument"""
|
||||
}
|
||||
@@ -1,8 +1,8 @@
|
||||
package com.infendro.cli.exception.run
|
||||
|
||||
class UnknownCommandException(
|
||||
class UnknownCommand(
|
||||
val command: String,
|
||||
) : CliException() {
|
||||
) : RunException() {
|
||||
override val message: String
|
||||
get() = """unknown command "$command""""
|
||||
}
|
||||
@@ -1,8 +1,8 @@
|
||||
package com.infendro.cli.exception.run
|
||||
|
||||
class UnknownOptionException(
|
||||
class UnknownOption(
|
||||
val option: String,
|
||||
) : CliException() {
|
||||
) : RunException() {
|
||||
override val message: String
|
||||
get() = """unknown option "$option""""
|
||||
}
|
||||
Reference in New Issue
Block a user