1.4.0 release #9
@@ -31,7 +31,7 @@ sealed class Command private constructor(
|
|||||||
command.renderer.render(result.path)?.let { print(it) }
|
command.renderer.render(result.path)?.let { print(it) }
|
||||||
}
|
}
|
||||||
is ContextParser.Result.Failure -> {
|
is ContextParser.Result.Failure -> {
|
||||||
println("error: ${result.error.message}")
|
println("error: ${result.failure.message}")
|
||||||
val command = result.path.last()
|
val command = result.path.last()
|
||||||
command.renderer.render(result.path)?.let {
|
command.renderer.render(result.path)?.let {
|
||||||
println()
|
println()
|
||||||
|
|||||||
@@ -19,13 +19,13 @@ internal class ContextParser(
|
|||||||
|
|
||||||
data class Failure(
|
data class Failure(
|
||||||
val path: List<Command>,
|
val path: List<Command>,
|
||||||
val error: RunError,
|
val failure: RuntimeFailure,
|
||||||
) : Result()
|
) : Result()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun success(context: Context) = Result.Success(context)
|
private fun success(context: Context) = Result.Success(context)
|
||||||
private fun help(path: List<Command>) = Result.Help(path)
|
private fun help(path: List<Command>) = Result.Help(path)
|
||||||
private fun failure(path: List<Command>, exception: RunError) = Result.Failure(path, exception)
|
private fun failure(path: List<Command>, exception: RuntimeFailure) = Result.Failure(path, exception)
|
||||||
|
|
||||||
private var index = 0
|
private var index = 0
|
||||||
private val current: String
|
private val current: String
|
||||||
@@ -63,7 +63,7 @@ internal class ContextParser(
|
|||||||
if (cmd is Command.Fallback<*>) {
|
if (cmd is Command.Fallback<*>) {
|
||||||
val value = when (val result = cmd.parser.parse(current)) {
|
val value = when (val result = cmd.parser.parse(current)) {
|
||||||
is Parser.Result.Success<*> -> result.value
|
is Parser.Result.Success<*> -> result.value
|
||||||
is Parser.Result.Failure<*> -> return failure(path, result.error)
|
is Parser.Result.Failure<*> -> return failure(path, result.failure)
|
||||||
}
|
}
|
||||||
commands[cmd.key] = value
|
commands[cmd.key] = value
|
||||||
}
|
}
|
||||||
@@ -91,7 +91,7 @@ internal class ContextParser(
|
|||||||
|
|
||||||
val value = when (val result = argument.parser.parse(trimmed)) {
|
val value = when (val result = argument.parser.parse(trimmed)) {
|
||||||
is Parser.Result.Success<*> -> result.value
|
is Parser.Result.Success<*> -> result.value
|
||||||
is Parser.Result.Failure<*> -> return failure(path, result.error)
|
is Parser.Result.Failure<*> -> return failure(path, result.failure)
|
||||||
}
|
}
|
||||||
arguments[argument]!! += value
|
arguments[argument]!! += value
|
||||||
argumentCount++
|
argumentCount++
|
||||||
@@ -141,7 +141,7 @@ internal class ContextParser(
|
|||||||
text != null ->
|
text != null ->
|
||||||
when (val result = option.parser.parse(current)) {
|
when (val result = option.parser.parse(current)) {
|
||||||
is Parser.Result.Success<*> -> result.value
|
is Parser.Result.Success<*> -> result.value
|
||||||
is Parser.Result.Failure<*> -> return failure(path, result.error)
|
is Parser.Result.Failure<*> -> return failure(path, result.failure)
|
||||||
}
|
}
|
||||||
option.flag -> option.fallback!!
|
option.flag -> option.fallback!!
|
||||||
else -> return failure(path, MissingOptionValue(option))
|
else -> return failure(path, MissingOptionValue(option))
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import com.infendro.cli.command.argument.Argument
|
|||||||
class InvalidArgumentCount(
|
class InvalidArgumentCount(
|
||||||
val argument: Argument<*>,
|
val argument: Argument<*>,
|
||||||
val count: Int,
|
val count: Int,
|
||||||
) : RunError() {
|
) : RuntimeFailure() {
|
||||||
override val message: String
|
override val message: String
|
||||||
get() {
|
get() {
|
||||||
val expected = when {
|
val expected = when {
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import com.infendro.cli.command.option.Option
|
|||||||
class InvalidOptionCount(
|
class InvalidOptionCount(
|
||||||
val option: Option<*>,
|
val option: Option<*>,
|
||||||
val count: Int,
|
val count: Int,
|
||||||
) : RunError() {
|
) : RuntimeFailure() {
|
||||||
override val message: String
|
override val message: String
|
||||||
get() {
|
get() {
|
||||||
val expected = when {
|
val expected = when {
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import kotlin.reflect.KClass
|
|||||||
class InvalidValue(
|
class InvalidValue(
|
||||||
val value: String,
|
val value: String,
|
||||||
val type: KClass<*>,
|
val type: KClass<*>,
|
||||||
) : RunError() {
|
) : RuntimeFailure() {
|
||||||
override val message: String
|
override val message: String
|
||||||
get() = """"$value" cannot be converted to ${type.simpleName ?: "Unknown"}"""
|
get() = """"$value" cannot be converted to ${type.simpleName ?: "Unknown"}"""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ package com.infendro.cli.error.run
|
|||||||
|
|
||||||
class MalformedOption(
|
class MalformedOption(
|
||||||
val option: String,
|
val option: String,
|
||||||
) : RunError() {
|
) : RuntimeFailure() {
|
||||||
override val message: String
|
override val message: String
|
||||||
get() = """malformed option "$option""""
|
get() = """malformed option "$option""""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import com.infendro.cli.command.option.Option
|
|||||||
|
|
||||||
class MissingOptionValue(
|
class MissingOptionValue(
|
||||||
val option: Option<*>,
|
val option: Option<*>,
|
||||||
) : RunError() {
|
) : RuntimeFailure() {
|
||||||
override val message: String
|
override val message: String
|
||||||
get() = """no value provided for option "${option.name}""""
|
get() = """no value provided for option "${option.name}""""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
package com.infendro.cli.error.run
|
package com.infendro.cli.error.run
|
||||||
|
|
||||||
abstract class RunError {
|
abstract class RuntimeFailure {
|
||||||
abstract val message: String
|
abstract val message: String
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
package com.infendro.cli.error.run
|
package com.infendro.cli.error.run
|
||||||
|
|
||||||
class UnexpectedArgument : RunError() {
|
class UnexpectedArgument : RuntimeFailure() {
|
||||||
override val message: String
|
override val message: String
|
||||||
get() = """unexpected argument"""
|
get() = """unexpected argument"""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ package com.infendro.cli.error.run
|
|||||||
|
|
||||||
class UnknownCommand(
|
class UnknownCommand(
|
||||||
val command: String,
|
val command: String,
|
||||||
) : RunError() {
|
) : RuntimeFailure() {
|
||||||
override val message: String
|
override val message: String
|
||||||
get() = """unknown command "$command""""
|
get() = """unknown command "$command""""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ package com.infendro.cli.error.run
|
|||||||
|
|
||||||
class UnknownOption(
|
class UnknownOption(
|
||||||
val option: String,
|
val option: String,
|
||||||
) : RunError() {
|
) : RuntimeFailure() {
|
||||||
override val message: String
|
override val message: String
|
||||||
get() = """unknown option "$option""""
|
get() = """unknown option "$option""""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package com.infendro.cli.parser
|
package com.infendro.cli.parser
|
||||||
|
|
||||||
import com.infendro.cli.error.run.InvalidValue
|
import com.infendro.cli.error.run.InvalidValue
|
||||||
import com.infendro.cli.error.run.RunError
|
import com.infendro.cli.error.run.RuntimeFailure
|
||||||
import kotlin.reflect.KClass
|
import kotlin.reflect.KClass
|
||||||
|
|
||||||
abstract class Parser<T : Any>(
|
abstract class Parser<T : Any>(
|
||||||
@@ -13,7 +13,7 @@ abstract class Parser<T : Any>(
|
|||||||
) : Result<T>()
|
) : Result<T>()
|
||||||
|
|
||||||
data class Failure<T : Any>(
|
data class Failure<T : Any>(
|
||||||
val error: RunError,
|
val failure: RuntimeFailure,
|
||||||
) : Result<T>()
|
) : Result<T>()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user