diff options
Diffstat (limited to 'src/main/kotlin/moe/nea/firm')
-rw-r--r-- | src/main/kotlin/moe/nea/firm/Codec.kt | 5 | ||||
-rw-r--r-- | src/main/kotlin/moe/nea/firm/EnumRenderer.kt | 13 | ||||
-rw-r--r-- | src/main/kotlin/moe/nea/firm/ManagedConfig.kt | 40 | ||||
-rw-r--r-- | src/main/kotlin/moe/nea/firm/ManagedOption.kt | 10 | ||||
-rw-r--r-- | src/main/kotlin/moe/nea/firm/User.kt | 14 |
5 files changed, 82 insertions, 0 deletions
diff --git a/src/main/kotlin/moe/nea/firm/Codec.kt b/src/main/kotlin/moe/nea/firm/Codec.kt new file mode 100644 index 0000000..1c19de4 --- /dev/null +++ b/src/main/kotlin/moe/nea/firm/Codec.kt @@ -0,0 +1,5 @@ +package moe.nea.firm + +interface Codec<T> { + +} diff --git a/src/main/kotlin/moe/nea/firm/EnumRenderer.kt b/src/main/kotlin/moe/nea/firm/EnumRenderer.kt new file mode 100644 index 0000000..3ffd6d3 --- /dev/null +++ b/src/main/kotlin/moe/nea/firm/EnumRenderer.kt @@ -0,0 +1,13 @@ +package moe.nea.firm + +interface EnumRenderer<E: Any> { + fun getName(option: ManagedOption<E>, value: E): String + companion object { + fun <E: Enum<E>> default() = object: EnumRenderer<E> { + override fun getName(option: ManagedOption<E>, value: E): String { + return value.name.lowercase() + } + + } + } +}
\ No newline at end of file diff --git a/src/main/kotlin/moe/nea/firm/ManagedConfig.kt b/src/main/kotlin/moe/nea/firm/ManagedConfig.kt new file mode 100644 index 0000000..87d35cc --- /dev/null +++ b/src/main/kotlin/moe/nea/firm/ManagedConfig.kt @@ -0,0 +1,40 @@ +package moe.nea.firm + +import ext.StringIdentifiable +import kotlin.enums.enumEntries + + +abstract class ManagedConfig(val identifier: String) { + protected fun <T : Any> option( + propertyName: String, + default: () -> T, +// handler: OptionHandler<T> + ): ManagedOption<T> { + return TODO() + } + + protected fun <E : Any> choice( + propertyName: String, + universe: List<E>, + codec: Codec<E>, + renderer: EnumRenderer<E>, + default: () -> E + ): ManagedOption<E> { + return option(propertyName, default, +// ChoiceHandler(universe, codec, renderer) + ) + } + + protected inline fun <reified E> choice( + propertyName: String, + noinline default: () -> E + ): ManagedOption<E> where E : Enum<E>, E : StringIdentifiable { + return choice( + propertyName, + enumEntries<E>().toList(), + StringIdentifiable.createCodec { enumValues<E>() }, + EnumRenderer.default(), + default + ) + } +} diff --git a/src/main/kotlin/moe/nea/firm/ManagedOption.kt b/src/main/kotlin/moe/nea/firm/ManagedOption.kt new file mode 100644 index 0000000..d51d693 --- /dev/null +++ b/src/main/kotlin/moe/nea/firm/ManagedOption.kt @@ -0,0 +1,10 @@ +package moe.nea.firm + +import kotlin.properties.ReadOnlyProperty +import kotlin.reflect.KProperty + +class ManagedOption<T : Any> : ReadOnlyProperty<Any?, T> { + override fun getValue(thisRef: Any?, property: KProperty<*>): T { + return TODO() + } +} diff --git a/src/main/kotlin/moe/nea/firm/User.kt b/src/main/kotlin/moe/nea/firm/User.kt new file mode 100644 index 0000000..4dfac0d --- /dev/null +++ b/src/main/kotlin/moe/nea/firm/User.kt @@ -0,0 +1,14 @@ +package moe.nea.firm + +import ext.StringIdentifiable + +object User : ManagedConfig("test") { + val option by choice("name") { TestEnum.A } + + enum class TestEnum : StringIdentifiable { + A, B, C; + } +} +fun main() { + User.option +}
\ No newline at end of file |