Skip to content

Instantly share code, notes, and snippets.

@OndraZizka
Created November 27, 2022 00:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save OndraZizka/facdbd4135001408cbdc6a51cbb2ddd3 to your computer and use it in GitHub Desktop.
Save OndraZizka/facdbd4135001408cbdc6a51cbb2ddd3 to your computer and use it in GitHub Desktop.
Kotlin: Parsing CLI options easily using ENUMs
private inline fun <reified T : OptionEnum> tryParseEnumOption(enumArgumentDefault: T, arg: String): T? {
val optionIntro = "--${enumArgumentDefault.optionName}"
if (!arg.startsWith(optionIntro))
return null
if (arg == optionIntro || arg == optionIntro + "=" + enumArgumentDefault.optionValue)
return enumArgumentDefault
val valueStr = arg.substringAfter(optionIntro).removePrefix("=")
val enumConstants = T::class.java.enumConstants
return enumConstants.firstOrNull { it.optionName == valueStr }
?: throw CrucherConfigException("Unknown value for ${enumArgumentDefault.optionName}: $arg Try one of ${enumConstants.map { it.optionValue }}")
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment