diff options
Diffstat (limited to 'src/main/kotlin/com/romangraef/jrconfig/Config.kt')
-rw-r--r-- | src/main/kotlin/com/romangraef/jrconfig/Config.kt | 35 |
1 files changed, 25 insertions, 10 deletions
diff --git a/src/main/kotlin/com/romangraef/jrconfig/Config.kt b/src/main/kotlin/com/romangraef/jrconfig/Config.kt index 7641689..47b8bae 100644 --- a/src/main/kotlin/com/romangraef/jrconfig/Config.kt +++ b/src/main/kotlin/com/romangraef/jrconfig/Config.kt @@ -1,25 +1,29 @@ package com.romangraef.jrconfig -import com.romangraef.jrconfig.variables.IntegerVariable -import com.romangraef.jrconfig.variables.StringVariable +import com.romangraef.jrconfig.variables.* -typealias ConfigVariableProvider<T> = (ConfigProvider, String) -> ConfigVariable<T> +typealias ConfigVariableProvider<T> = (ConfigSaveLoadProvider, String) -> ConfigVariable<T> object Config { - private var configProvider: ConfigProvider? = null + private var configProvider = mutableListOf<ConfigProvider>() private val map: MutableMap<Class<*>, ConfigVariableProvider<*>> = mutableMapOf() - private val proxyProvider: ConfigProvider = object : ConfigProvider { + private val proxyProvider: ConfigSaveLoadProvider = object : ConfigSaveLoadProvider { override fun provideData(point: String): String? = - configProvider?.provideData(point) + configProvider.map { it.provideData(point) }.firstOrNull() - override fun setData(point: String, data: String) = - configProvider?.setData(point, data) ?: Unit + override fun setData(point: String, data: String): Boolean = + configProvider.asSequence().mapNotNull { it as? ConfigSaveLoadProvider }.map { it.setData(point, data) } + .firstOrNull() ?: false + } init { + map[Double::class.java] = ::DoubleVariable + map[Float::class.java] = ::FloatVariable map[Int::class.java] = ::IntegerVariable + map[Long::class.java] = ::LongVariable map[String::class.java] = ::StringVariable } @@ -31,7 +35,13 @@ object Config { ?: throw ConfigMissingProviderException(clazz) } + @JvmStatic + fun <T : Enum<T>> getEnum(enumClass: Class<T>, point: String): ConfigVariable<T> { + return EnumVariable(enumClass, proxyProvider, point) + } + inline fun <reified T> get(point: String) = get(T::class.java, point) + inline fun <reified T : Enum<T>> getEnum(point: String) = getEnum(T::class.java, point) @JvmStatic fun <T> registerConfigVariableProvider(clazz: Class<T>, provider: ConfigVariableProvider<T>) { @@ -43,8 +53,13 @@ object Config { @JvmStatic - fun use(provider: ConfigProvider?) { - configProvider = provider + fun use(provider: ConfigProvider) { + configProvider.add(provider) + } + + @JvmStatic + fun useFirst(provider: ConfigProvider) { + configProvider.add(0, provider) } @JvmStatic |