implement EnumParser
This commit is contained in:
@@ -1,9 +1,7 @@
|
|||||||
package com.infendro.cli.command
|
package com.infendro.cli.command
|
||||||
|
|
||||||
import com.infendro.cli.parser.BooleanParser
|
import com.infendro.cli.parser.*
|
||||||
import com.infendro.cli.parser.IntParser
|
|
||||||
import com.infendro.cli.parser.Parser
|
import com.infendro.cli.parser.Parser
|
||||||
import com.infendro.cli.parser.StringParser
|
|
||||||
|
|
||||||
sealed class Argument<T>(
|
sealed class Argument<T>(
|
||||||
val parser: Parser<T>,
|
val parser: Parser<T>,
|
||||||
@@ -75,5 +73,17 @@ sealed class Argument<T>(
|
|||||||
|
|
||||||
fun booleans() =
|
fun booleans() =
|
||||||
Variable(BooleanParser)
|
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>())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,8 @@
|
|||||||
package com.infendro.cli.command
|
package com.infendro.cli.command
|
||||||
|
|
||||||
import com.infendro.cli.exception.build.NoOptionNameException
|
import com.infendro.cli.exception.build.NoOptionNameException
|
||||||
import com.infendro.cli.parser.BooleanParser
|
import com.infendro.cli.parser.*
|
||||||
import com.infendro.cli.parser.IntParser
|
|
||||||
import com.infendro.cli.parser.Parser
|
import com.infendro.cli.parser.Parser
|
||||||
import com.infendro.cli.parser.StringParser
|
|
||||||
|
|
||||||
sealed class Option<T>(
|
sealed class Option<T>(
|
||||||
val names: List<String>,
|
val names: List<String>,
|
||||||
@@ -89,5 +87,17 @@ sealed class Option<T>(
|
|||||||
|
|
||||||
fun booleans(vararg names: String) =
|
fun booleans(vararg names: String) =
|
||||||
Variable(names.asList(), BooleanParser)
|
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>())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
17
src/commonMain/kotlin/com/infendro/cli/parser/EnumParser.kt
Normal file
17
src/commonMain/kotlin/com/infendro/cli/parser/EnumParser.kt
Normal 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>())
|
||||||
Reference in New Issue
Block a user