1.4.0 release #9

Merged
Infendro merged 20 commits from develop into main 2026-01-10 07:37:21 +00:00
3 changed files with 43 additions and 6 deletions
Showing only changes of commit 06a2d1bdce - Show all commits

View File

@@ -1,9 +1,7 @@
package com.infendro.cli.command
import com.infendro.cli.parser.BooleanParser
import com.infendro.cli.parser.IntParser
import com.infendro.cli.parser.*
import com.infendro.cli.parser.Parser
import com.infendro.cli.parser.StringParser
sealed class Argument<T>(
val parser: Parser<T>,
@@ -75,5 +73,17 @@ sealed class Argument<T>(
fun booleans() =
Variable(BooleanParser)
inline fun <reified T : Enum<T>> enum() =
Required(enumParser<T>())
inline fun <reified T : Enum<T>> enumOrElse(other: T) =
OrElse(other, enumParser<T>())
inline fun <reified T : Enum<T>> enumOrNull() =
OrNull(enumParser<T>())
inline fun <reified T : Enum<T>> enums() =
Variable(enumParser<T>())
}
}

View File

@@ -1,10 +1,8 @@
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.*
import com.infendro.cli.parser.Parser
import com.infendro.cli.parser.StringParser
sealed class Option<T>(
val names: List<String>,
@@ -89,5 +87,17 @@ sealed class Option<T>(
fun booleans(vararg names: String) =
Variable(names.asList(), BooleanParser)
inline fun <reified T : Enum<T>> enum(vararg names: String) =
Required(names.asList(), enumParser<T>())
inline fun <reified T : Enum<T>> enumOrElse(vararg names: String, other: T) =
OrElse(names.asList(), other, enumParser<T>())
inline fun <reified T : Enum<T>> enumOrNull(vararg names: String) =
OrNull(names.asList(), enumParser<T>())
inline fun <reified T : Enum<T>> enums(vararg names: String) =
Variable(names.asList(), enumParser<T>())
}
}

View File

@@ -0,0 +1,17 @@
package com.infendro.cli.parser
import com.infendro.cli.exception.run.ParseException
import kotlin.enums.enumEntries
class EnumParser<T : Enum<T>>(
private val name: String,
private val values: List<T>,
) : Parser<T> {
override fun parse(text: String?): T = try {
values.first { it.name == text }
} catch (_: Exception) {
throw ParseException(text, name)
}
}
inline fun <reified T : Enum<T>> enumParser() = EnumParser(T::class.simpleName!!, enumEntries<T>())