From 330e928697d6d3df6d837b7ef2b66e329592eeca Mon Sep 17 00:00:00 2001 From: Linnea Gräf Date: Tue, 26 Nov 2024 22:24:11 +0100 Subject: init --- src/main/java/ext/StringIdentifiable.java | 12 ++++++++ src/main/kotlin/moe/nea/firm/Codec.kt | 5 ++++ src/main/kotlin/moe/nea/firm/EnumRenderer.kt | 13 +++++++++ src/main/kotlin/moe/nea/firm/ManagedConfig.kt | 40 +++++++++++++++++++++++++++ src/main/kotlin/moe/nea/firm/ManagedOption.kt | 10 +++++++ src/main/kotlin/moe/nea/firm/User.kt | 14 ++++++++++ 6 files changed, 94 insertions(+) create mode 100644 src/main/java/ext/StringIdentifiable.java create mode 100644 src/main/kotlin/moe/nea/firm/Codec.kt create mode 100644 src/main/kotlin/moe/nea/firm/EnumRenderer.kt create mode 100644 src/main/kotlin/moe/nea/firm/ManagedConfig.kt create mode 100644 src/main/kotlin/moe/nea/firm/ManagedOption.kt create mode 100644 src/main/kotlin/moe/nea/firm/User.kt (limited to 'src/main') diff --git a/src/main/java/ext/StringIdentifiable.java b/src/main/java/ext/StringIdentifiable.java new file mode 100644 index 0000000..cc11c64 --- /dev/null +++ b/src/main/java/ext/StringIdentifiable.java @@ -0,0 +1,12 @@ +package ext; + +import moe.nea.firm.Codec; + +import java.util.function.Supplier; + +public interface StringIdentifiable { + static Codec createCodec(Supplier supplier) { + return null; + } +} + 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 { + +} 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 { + fun getName(option: ManagedOption, value: E): String + companion object { + fun > default() = object: EnumRenderer { + override fun getName(option: ManagedOption, 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 option( + propertyName: String, + default: () -> T, +// handler: OptionHandler + ): ManagedOption { + return TODO() + } + + protected fun choice( + propertyName: String, + universe: List, + codec: Codec, + renderer: EnumRenderer, + default: () -> E + ): ManagedOption { + return option(propertyName, default, +// ChoiceHandler(universe, codec, renderer) + ) + } + + protected inline fun choice( + propertyName: String, + noinline default: () -> E + ): ManagedOption where E : Enum, E : StringIdentifiable { + return choice( + propertyName, + enumEntries().toList(), + StringIdentifiable.createCodec { enumValues() }, + 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 : ReadOnlyProperty { + 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 -- cgit