package moe.nea.firm import ext.StringIdentifiable interface EnumRenderer { companion object { fun > default() = object: EnumRenderer {} } } interface Codec { } abstract class ManagedConfig { protected fun choice( codec: Codec, renderer: EnumRenderer, ) {} protected inline fun choice( ) where E : Enum, E : StringIdentifiable { return choice( StringIdentifiable.createCodec { enumValues() }, EnumRenderer.default(), ) } }