diff --git a/src/commonMain/kotlin/com/infendro/cli/argument/Argument.kt b/src/commonMain/kotlin/com/infendro/cli/argument/Argument.kt index 6d38dbb..15f137c 100644 --- a/src/commonMain/kotlin/com/infendro/cli/argument/Argument.kt +++ b/src/commonMain/kotlin/com/infendro/cli/argument/Argument.kt @@ -1,7 +1,7 @@ package com.infendro.cli.argument -import com.infendro.cli.error.build.InvalidArgumentName -import com.infendro.cli.error.build.InvalidRange +import com.infendro.cli.exception.InvalidArgumentName +import com.infendro.cli.exception.InvalidRange import com.infendro.cli.parser.Parser import com.infendro.cli.util.Regex.ARGUMENT diff --git a/src/commonMain/kotlin/com/infendro/cli/command/Command.kt b/src/commonMain/kotlin/com/infendro/cli/command/Command.kt index 55ad40f..88b8c85 100644 --- a/src/commonMain/kotlin/com/infendro/cli/command/Command.kt +++ b/src/commonMain/kotlin/com/infendro/cli/command/Command.kt @@ -6,8 +6,8 @@ import com.infendro.cli.command.context.Context import com.infendro.cli.command.context.ContextParser import com.infendro.cli.command.help.DefaultHelpRenderer import com.infendro.cli.command.help.HelpRenderer +import com.infendro.cli.exception.* import com.infendro.cli.option.Option -import com.infendro.cli.error.build.* import com.infendro.cli.parser.Parser import com.infendro.cli.util.Regex @@ -33,7 +33,7 @@ sealed class Command private constructor( if (help != null) print(help) } is ContextParser.Result.Failure -> { - println("error: ${result.failure.message}") + println("error: ${result.error.message}") val command = result.path.last() val help = command.renderer.render(result.path) if (help != null) print("\n$help") diff --git a/src/commonMain/kotlin/com/infendro/cli/command/context/ContextParser.kt b/src/commonMain/kotlin/com/infendro/cli/command/context/ContextParser.kt index 9cdde49..605c1bf 100644 --- a/src/commonMain/kotlin/com/infendro/cli/command/context/ContextParser.kt +++ b/src/commonMain/kotlin/com/infendro/cli/command/context/ContextParser.kt @@ -1,7 +1,7 @@ package com.infendro.cli.command.context import com.infendro.cli.command.Command -import com.infendro.cli.error.run.* +import com.infendro.cli.error.* import com.infendro.cli.parser.Parser internal class ContextParser( @@ -19,13 +19,13 @@ internal class ContextParser( data class Failure( val path: List, - val failure: RuntimeFailure, + val error: Error, ) : Result() } private fun success(context: Context) = Result.Success(context) private fun help(path: List) = Result.Help(path) - private fun failure(path: List, exception: RuntimeFailure) = Result.Failure(path, exception) + private fun failure(path: List, error: Error) = Result.Failure(path, error) private var index = 0 private val current: String @@ -63,7 +63,7 @@ internal class ContextParser( if (cmd is Command.Fallback<*>) { val value = when (val result = cmd.parser.parse(current)) { is Parser.Result.Success<*> -> result.value - is Parser.Result.Failure<*> -> return failure(path, result.failure) + is Parser.Result.Failure<*> -> return failure(path, result.error) } commands[cmd.key] = value } @@ -91,7 +91,7 @@ internal class ContextParser( val value = when (val result = argument.parser.parse(current)) { is Parser.Result.Success<*> -> result.value - is Parser.Result.Failure<*> -> return failure(path, result.failure) + is Parser.Result.Failure<*> -> return failure(path, result.error) } arguments[argument]!! += value argumentCount++ @@ -141,7 +141,7 @@ internal class ContextParser( text != null -> when (val result = option.parser.parse(text)) { is Parser.Result.Success<*> -> result.value - is Parser.Result.Failure<*> -> return failure(path, result.failure) + is Parser.Result.Failure<*> -> return failure(path, result.error) } option.flag -> option.fallback!! else -> return failure(path, MissingOptionValue(option)) diff --git a/src/commonMain/kotlin/com/infendro/cli/error/Error.kt b/src/commonMain/kotlin/com/infendro/cli/error/Error.kt new file mode 100644 index 0000000..a3b6b26 --- /dev/null +++ b/src/commonMain/kotlin/com/infendro/cli/error/Error.kt @@ -0,0 +1,5 @@ +package com.infendro.cli.error + +abstract class Error { + abstract val message: String +} diff --git a/src/commonMain/kotlin/com/infendro/cli/error/run/InvalidArgumentCount.kt b/src/commonMain/kotlin/com/infendro/cli/error/InvalidArgumentCount.kt similarity index 90% rename from src/commonMain/kotlin/com/infendro/cli/error/run/InvalidArgumentCount.kt rename to src/commonMain/kotlin/com/infendro/cli/error/InvalidArgumentCount.kt index 5073a93..3149682 100644 --- a/src/commonMain/kotlin/com/infendro/cli/error/run/InvalidArgumentCount.kt +++ b/src/commonMain/kotlin/com/infendro/cli/error/InvalidArgumentCount.kt @@ -1,11 +1,11 @@ -package com.infendro.cli.error.run +package com.infendro.cli.error import com.infendro.cli.argument.Argument class InvalidArgumentCount( val argument: Argument<*>, val count: Int, -) : RuntimeFailure() { +) : Error() { override val message: String get() { val expected = when { diff --git a/src/commonMain/kotlin/com/infendro/cli/error/run/InvalidOptionCount.kt b/src/commonMain/kotlin/com/infendro/cli/error/InvalidOptionCount.kt similarity index 90% rename from src/commonMain/kotlin/com/infendro/cli/error/run/InvalidOptionCount.kt rename to src/commonMain/kotlin/com/infendro/cli/error/InvalidOptionCount.kt index c80c0f8..8a4acfc 100644 --- a/src/commonMain/kotlin/com/infendro/cli/error/run/InvalidOptionCount.kt +++ b/src/commonMain/kotlin/com/infendro/cli/error/InvalidOptionCount.kt @@ -1,11 +1,11 @@ -package com.infendro.cli.error.run +package com.infendro.cli.error import com.infendro.cli.option.Option class InvalidOptionCount( val option: Option<*>, val count: Int, -) : RuntimeFailure() { +) : Error() { override val message: String get() { val expected = when { diff --git a/src/commonMain/kotlin/com/infendro/cli/error/run/InvalidValue.kt b/src/commonMain/kotlin/com/infendro/cli/error/InvalidValue.kt similarity index 79% rename from src/commonMain/kotlin/com/infendro/cli/error/run/InvalidValue.kt rename to src/commonMain/kotlin/com/infendro/cli/error/InvalidValue.kt index ecf5d99..ab5e430 100644 --- a/src/commonMain/kotlin/com/infendro/cli/error/run/InvalidValue.kt +++ b/src/commonMain/kotlin/com/infendro/cli/error/InvalidValue.kt @@ -1,11 +1,11 @@ -package com.infendro.cli.error.run +package com.infendro.cli.error import kotlin.reflect.KClass class InvalidValue( val value: String, val type: KClass<*>, -) : RuntimeFailure() { +) : Error() { override val message: String get() = """"$value" cannot be converted to ${type.simpleName ?: "Unknown"}.""" } diff --git a/src/commonMain/kotlin/com/infendro/cli/error/run/MalformedOption.kt b/src/commonMain/kotlin/com/infendro/cli/error/MalformedOption.kt similarity index 69% rename from src/commonMain/kotlin/com/infendro/cli/error/run/MalformedOption.kt rename to src/commonMain/kotlin/com/infendro/cli/error/MalformedOption.kt index 097db35..98da6a5 100644 --- a/src/commonMain/kotlin/com/infendro/cli/error/run/MalformedOption.kt +++ b/src/commonMain/kotlin/com/infendro/cli/error/MalformedOption.kt @@ -1,8 +1,8 @@ -package com.infendro.cli.error.run +package com.infendro.cli.error class MalformedOption( val option: String, -) : RuntimeFailure() { +) : Error() { override val message: String get() = """Malformed option "$option".""" } diff --git a/src/commonMain/kotlin/com/infendro/cli/error/run/MissingOptionValue.kt b/src/commonMain/kotlin/com/infendro/cli/error/MissingOptionValue.kt similarity index 77% rename from src/commonMain/kotlin/com/infendro/cli/error/run/MissingOptionValue.kt rename to src/commonMain/kotlin/com/infendro/cli/error/MissingOptionValue.kt index 11b6f41..ae2b086 100644 --- a/src/commonMain/kotlin/com/infendro/cli/error/run/MissingOptionValue.kt +++ b/src/commonMain/kotlin/com/infendro/cli/error/MissingOptionValue.kt @@ -1,10 +1,10 @@ -package com.infendro.cli.error.run +package com.infendro.cli.error import com.infendro.cli.option.Option class MissingOptionValue( val option: Option<*>, -) : RuntimeFailure() { +) : Error() { override val message: String get() = """No value provided for option "${option.name}".""" } diff --git a/src/commonMain/kotlin/com/infendro/cli/error/run/UnexpectedArgument.kt b/src/commonMain/kotlin/com/infendro/cli/error/UnexpectedArgument.kt similarity index 71% rename from src/commonMain/kotlin/com/infendro/cli/error/run/UnexpectedArgument.kt rename to src/commonMain/kotlin/com/infendro/cli/error/UnexpectedArgument.kt index 960d2d2..cf26ec8 100644 --- a/src/commonMain/kotlin/com/infendro/cli/error/run/UnexpectedArgument.kt +++ b/src/commonMain/kotlin/com/infendro/cli/error/UnexpectedArgument.kt @@ -1,8 +1,8 @@ -package com.infendro.cli.error.run +package com.infendro.cli.error class UnexpectedArgument( val argument: String, -) : RuntimeFailure() { +) : Error() { override val message: String get() = """Unexpected argument "$argument".""" } diff --git a/src/commonMain/kotlin/com/infendro/cli/error/run/UnknownCommand.kt b/src/commonMain/kotlin/com/infendro/cli/error/UnknownCommand.kt similarity index 92% rename from src/commonMain/kotlin/com/infendro/cli/error/run/UnknownCommand.kt rename to src/commonMain/kotlin/com/infendro/cli/error/UnknownCommand.kt index 643c51c..4429de2 100644 --- a/src/commonMain/kotlin/com/infendro/cli/error/run/UnknownCommand.kt +++ b/src/commonMain/kotlin/com/infendro/cli/error/UnknownCommand.kt @@ -1,4 +1,4 @@ -package com.infendro.cli.error.run +package com.infendro.cli.error import com.infendro.cli.command.Command import com.infendro.cli.util.distance @@ -8,7 +8,7 @@ import kotlin.math.min class UnknownCommand( val command: Command, val name: String, -) : RuntimeFailure() { +) : Error() { override val message: String get() = buildString { val suggestion = command.commands diff --git a/src/commonMain/kotlin/com/infendro/cli/error/run/UnknownOption.kt b/src/commonMain/kotlin/com/infendro/cli/error/UnknownOption.kt similarity index 92% rename from src/commonMain/kotlin/com/infendro/cli/error/run/UnknownOption.kt rename to src/commonMain/kotlin/com/infendro/cli/error/UnknownOption.kt index cb01a69..d697e36 100644 --- a/src/commonMain/kotlin/com/infendro/cli/error/run/UnknownOption.kt +++ b/src/commonMain/kotlin/com/infendro/cli/error/UnknownOption.kt @@ -1,4 +1,4 @@ -package com.infendro.cli.error.run +package com.infendro.cli.error import com.infendro.cli.command.Command import com.infendro.cli.util.distance @@ -8,7 +8,7 @@ import kotlin.math.min class UnknownOption( val command: Command, val name: String, -) : RuntimeFailure() { +) : Error() { override val message: String get() = buildString { val suggestion = command.options diff --git a/src/commonMain/kotlin/com/infendro/cli/error/run/RuntimeFailure.kt b/src/commonMain/kotlin/com/infendro/cli/error/run/RuntimeFailure.kt deleted file mode 100644 index a027c36..0000000 --- a/src/commonMain/kotlin/com/infendro/cli/error/run/RuntimeFailure.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.infendro.cli.error.run - -abstract class RuntimeFailure { - abstract val message: String -} diff --git a/src/commonMain/kotlin/com/infendro/cli/error/build/BuildException.kt b/src/commonMain/kotlin/com/infendro/cli/exception/BuildException.kt similarity index 54% rename from src/commonMain/kotlin/com/infendro/cli/error/build/BuildException.kt rename to src/commonMain/kotlin/com/infendro/cli/exception/BuildException.kt index 0c1af10..bf5d540 100644 --- a/src/commonMain/kotlin/com/infendro/cli/error/build/BuildException.kt +++ b/src/commonMain/kotlin/com/infendro/cli/exception/BuildException.kt @@ -1,3 +1,3 @@ -package com.infendro.cli.error.build +package com.infendro.cli.exception abstract class BuildException : Exception() diff --git a/src/commonMain/kotlin/com/infendro/cli/error/build/DuplicateArgument.kt b/src/commonMain/kotlin/com/infendro/cli/exception/DuplicateArgument.kt similarity index 85% rename from src/commonMain/kotlin/com/infendro/cli/error/build/DuplicateArgument.kt rename to src/commonMain/kotlin/com/infendro/cli/exception/DuplicateArgument.kt index 17ceb79..d8b285d 100644 --- a/src/commonMain/kotlin/com/infendro/cli/error/build/DuplicateArgument.kt +++ b/src/commonMain/kotlin/com/infendro/cli/exception/DuplicateArgument.kt @@ -1,4 +1,4 @@ -package com.infendro.cli.error.build +package com.infendro.cli.exception import com.infendro.cli.argument.Argument diff --git a/src/commonMain/kotlin/com/infendro/cli/error/build/DuplicateCommand.kt b/src/commonMain/kotlin/com/infendro/cli/exception/DuplicateCommand.kt similarity index 84% rename from src/commonMain/kotlin/com/infendro/cli/error/build/DuplicateCommand.kt rename to src/commonMain/kotlin/com/infendro/cli/exception/DuplicateCommand.kt index 4919bb0..a33651e 100644 --- a/src/commonMain/kotlin/com/infendro/cli/error/build/DuplicateCommand.kt +++ b/src/commonMain/kotlin/com/infendro/cli/exception/DuplicateCommand.kt @@ -1,4 +1,4 @@ -package com.infendro.cli.error.build +package com.infendro.cli.exception import com.infendro.cli.command.Command diff --git a/src/commonMain/kotlin/com/infendro/cli/error/build/DuplicateExecute.kt b/src/commonMain/kotlin/com/infendro/cli/exception/DuplicateExecute.kt similarity index 77% rename from src/commonMain/kotlin/com/infendro/cli/error/build/DuplicateExecute.kt rename to src/commonMain/kotlin/com/infendro/cli/exception/DuplicateExecute.kt index f52c38d..335bff9 100644 --- a/src/commonMain/kotlin/com/infendro/cli/error/build/DuplicateExecute.kt +++ b/src/commonMain/kotlin/com/infendro/cli/exception/DuplicateExecute.kt @@ -1,4 +1,4 @@ -package com.infendro.cli.error.build +package com.infendro.cli.exception class DuplicateExecute : BuildException() { override val message: String diff --git a/src/commonMain/kotlin/com/infendro/cli/error/build/DuplicateOption.kt b/src/commonMain/kotlin/com/infendro/cli/exception/DuplicateOption.kt similarity index 84% rename from src/commonMain/kotlin/com/infendro/cli/error/build/DuplicateOption.kt rename to src/commonMain/kotlin/com/infendro/cli/exception/DuplicateOption.kt index 5124de8..c56bd1b 100644 --- a/src/commonMain/kotlin/com/infendro/cli/error/build/DuplicateOption.kt +++ b/src/commonMain/kotlin/com/infendro/cli/exception/DuplicateOption.kt @@ -1,4 +1,4 @@ -package com.infendro.cli.error.build +package com.infendro.cli.exception import com.infendro.cli.option.Option diff --git a/src/commonMain/kotlin/com/infendro/cli/error/build/DuplicateRenderer.kt b/src/commonMain/kotlin/com/infendro/cli/exception/DuplicateRenderer.kt similarity index 76% rename from src/commonMain/kotlin/com/infendro/cli/error/build/DuplicateRenderer.kt rename to src/commonMain/kotlin/com/infendro/cli/exception/DuplicateRenderer.kt index 347b803..492bb3d 100644 --- a/src/commonMain/kotlin/com/infendro/cli/error/build/DuplicateRenderer.kt +++ b/src/commonMain/kotlin/com/infendro/cli/exception/DuplicateRenderer.kt @@ -1,4 +1,4 @@ -package com.infendro.cli.error.build +package com.infendro.cli.exception class DuplicateRenderer : BuildException() { override val message: String diff --git a/src/commonMain/kotlin/com/infendro/cli/error/build/InvalidArgumentName.kt b/src/commonMain/kotlin/com/infendro/cli/exception/InvalidArgumentName.kt similarity index 81% rename from src/commonMain/kotlin/com/infendro/cli/error/build/InvalidArgumentName.kt rename to src/commonMain/kotlin/com/infendro/cli/exception/InvalidArgumentName.kt index 8a9a3d5..43b3ea8 100644 --- a/src/commonMain/kotlin/com/infendro/cli/error/build/InvalidArgumentName.kt +++ b/src/commonMain/kotlin/com/infendro/cli/exception/InvalidArgumentName.kt @@ -1,4 +1,4 @@ -package com.infendro.cli.error.build +package com.infendro.cli.exception class InvalidArgumentName( val name: String, diff --git a/src/commonMain/kotlin/com/infendro/cli/error/build/InvalidArgumentOrder.kt b/src/commonMain/kotlin/com/infendro/cli/exception/InvalidArgumentOrder.kt similarity index 77% rename from src/commonMain/kotlin/com/infendro/cli/error/build/InvalidArgumentOrder.kt rename to src/commonMain/kotlin/com/infendro/cli/exception/InvalidArgumentOrder.kt index f5b4b52..119ded7 100644 --- a/src/commonMain/kotlin/com/infendro/cli/error/build/InvalidArgumentOrder.kt +++ b/src/commonMain/kotlin/com/infendro/cli/exception/InvalidArgumentOrder.kt @@ -1,4 +1,4 @@ -package com.infendro.cli.error.build +package com.infendro.cli.exception class InvalidArgumentOrder : BuildException() { override val message: String diff --git a/src/commonMain/kotlin/com/infendro/cli/error/build/InvalidCommandName.kt b/src/commonMain/kotlin/com/infendro/cli/exception/InvalidCommandName.kt similarity index 81% rename from src/commonMain/kotlin/com/infendro/cli/error/build/InvalidCommandName.kt rename to src/commonMain/kotlin/com/infendro/cli/exception/InvalidCommandName.kt index e1fd029..109f827 100644 --- a/src/commonMain/kotlin/com/infendro/cli/error/build/InvalidCommandName.kt +++ b/src/commonMain/kotlin/com/infendro/cli/exception/InvalidCommandName.kt @@ -1,4 +1,4 @@ -package com.infendro.cli.error.build +package com.infendro.cli.exception class InvalidCommandName( val name: String, diff --git a/src/commonMain/kotlin/com/infendro/cli/error/build/InvalidCommandOrder.kt b/src/commonMain/kotlin/com/infendro/cli/exception/InvalidCommandOrder.kt similarity index 77% rename from src/commonMain/kotlin/com/infendro/cli/error/build/InvalidCommandOrder.kt rename to src/commonMain/kotlin/com/infendro/cli/exception/InvalidCommandOrder.kt index eb65123..81b2b19 100644 --- a/src/commonMain/kotlin/com/infendro/cli/error/build/InvalidCommandOrder.kt +++ b/src/commonMain/kotlin/com/infendro/cli/exception/InvalidCommandOrder.kt @@ -1,4 +1,4 @@ -package com.infendro.cli.error.build +package com.infendro.cli.exception class InvalidCommandOrder : BuildException() { override val message: String diff --git a/src/commonMain/kotlin/com/infendro/cli/error/build/InvalidFallback.kt b/src/commonMain/kotlin/com/infendro/cli/exception/InvalidFallback.kt similarity index 76% rename from src/commonMain/kotlin/com/infendro/cli/error/build/InvalidFallback.kt rename to src/commonMain/kotlin/com/infendro/cli/exception/InvalidFallback.kt index ac0c01a..b897c1c 100644 --- a/src/commonMain/kotlin/com/infendro/cli/error/build/InvalidFallback.kt +++ b/src/commonMain/kotlin/com/infendro/cli/exception/InvalidFallback.kt @@ -1,4 +1,4 @@ -package com.infendro.cli.error.build +package com.infendro.cli.exception class InvalidFallback : BuildException() { override val message: String diff --git a/src/commonMain/kotlin/com/infendro/cli/error/build/InvalidOptionName.kt b/src/commonMain/kotlin/com/infendro/cli/exception/InvalidOptionName.kt similarity index 80% rename from src/commonMain/kotlin/com/infendro/cli/error/build/InvalidOptionName.kt rename to src/commonMain/kotlin/com/infendro/cli/exception/InvalidOptionName.kt index 1eeaa0d..34bc6a8 100644 --- a/src/commonMain/kotlin/com/infendro/cli/error/build/InvalidOptionName.kt +++ b/src/commonMain/kotlin/com/infendro/cli/exception/InvalidOptionName.kt @@ -1,4 +1,4 @@ -package com.infendro.cli.error.build +package com.infendro.cli.exception class InvalidOptionName( val name: String, diff --git a/src/commonMain/kotlin/com/infendro/cli/error/build/InvalidRange.kt b/src/commonMain/kotlin/com/infendro/cli/exception/InvalidRange.kt similarity index 75% rename from src/commonMain/kotlin/com/infendro/cli/error/build/InvalidRange.kt rename to src/commonMain/kotlin/com/infendro/cli/exception/InvalidRange.kt index f95e8df..31c1d50 100644 --- a/src/commonMain/kotlin/com/infendro/cli/error/build/InvalidRange.kt +++ b/src/commonMain/kotlin/com/infendro/cli/exception/InvalidRange.kt @@ -1,4 +1,4 @@ -package com.infendro.cli.error.build +package com.infendro.cli.exception class InvalidRange : BuildException() { override val message: String diff --git a/src/commonMain/kotlin/com/infendro/cli/error/build/MissingOptionName.kt b/src/commonMain/kotlin/com/infendro/cli/exception/MissingOptionName.kt similarity index 76% rename from src/commonMain/kotlin/com/infendro/cli/error/build/MissingOptionName.kt rename to src/commonMain/kotlin/com/infendro/cli/exception/MissingOptionName.kt index a7997fd..4386853 100644 --- a/src/commonMain/kotlin/com/infendro/cli/error/build/MissingOptionName.kt +++ b/src/commonMain/kotlin/com/infendro/cli/exception/MissingOptionName.kt @@ -1,4 +1,4 @@ -package com.infendro.cli.error.build +package com.infendro.cli.exception class MissingOptionName : BuildException() { override val message: String diff --git a/src/commonMain/kotlin/com/infendro/cli/option/Option.kt b/src/commonMain/kotlin/com/infendro/cli/option/Option.kt index 69c806d..5c5718b 100644 --- a/src/commonMain/kotlin/com/infendro/cli/option/Option.kt +++ b/src/commonMain/kotlin/com/infendro/cli/option/Option.kt @@ -1,8 +1,8 @@ package com.infendro.cli.option -import com.infendro.cli.error.build.InvalidOptionName -import com.infendro.cli.error.build.InvalidRange -import com.infendro.cli.error.build.MissingOptionName +import com.infendro.cli.exception.InvalidOptionName +import com.infendro.cli.exception.InvalidRange +import com.infendro.cli.exception.MissingOptionName import com.infendro.cli.parser.Parser import com.infendro.cli.util.Regex.OPTION diff --git a/src/commonMain/kotlin/com/infendro/cli/parser/Parser.kt b/src/commonMain/kotlin/com/infendro/cli/parser/Parser.kt index 257f2f0..0eb92dd 100644 --- a/src/commonMain/kotlin/com/infendro/cli/parser/Parser.kt +++ b/src/commonMain/kotlin/com/infendro/cli/parser/Parser.kt @@ -1,7 +1,7 @@ package com.infendro.cli.parser -import com.infendro.cli.error.run.InvalidValue -import com.infendro.cli.error.run.RuntimeFailure +import com.infendro.cli.error.Error +import com.infendro.cli.error.InvalidValue import kotlin.reflect.KClass abstract class Parser( @@ -13,7 +13,7 @@ abstract class Parser( ) : Result() data class Failure( - val failure: RuntimeFailure, + val error: Error, ) : Result() }