From a22fd2a6b3248d8b9309d3a88ccc7e107d0cfcd8 Mon Sep 17 00:00:00 2001 From: Roman Gräf Date: Thu, 30 Apr 2020 03:28:48 +0200 Subject: Initial commit --- src/main/kotlin/com/romangraef/jrconfig/Config.kt | 55 +++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 src/main/kotlin/com/romangraef/jrconfig/Config.kt (limited to 'src/main/kotlin/com/romangraef/jrconfig/Config.kt') diff --git a/src/main/kotlin/com/romangraef/jrconfig/Config.kt b/src/main/kotlin/com/romangraef/jrconfig/Config.kt new file mode 100644 index 0000000..7641689 --- /dev/null +++ b/src/main/kotlin/com/romangraef/jrconfig/Config.kt @@ -0,0 +1,55 @@ +package com.romangraef.jrconfig + +import com.romangraef.jrconfig.variables.IntegerVariable +import com.romangraef.jrconfig.variables.StringVariable + +typealias ConfigVariableProvider = (ConfigProvider, String) -> ConfigVariable + +object Config { + private var configProvider: ConfigProvider? = null + private val map: MutableMap, ConfigVariableProvider<*>> = mutableMapOf() + private val proxyProvider: ConfigProvider = object : ConfigProvider { + + override fun provideData(point: String): String? = + configProvider?.provideData(point) + + + override fun setData(point: String, data: String) = + configProvider?.setData(point, data) ?: Unit + } + + init { + map[Int::class.java] = ::IntegerVariable + map[String::class.java] = ::StringVariable + } + + + @Suppress("UNCHECKED_CAST") + @JvmStatic + fun get(clazz: Class, point: String): ConfigVariable { + return (map[clazz] as? ConfigVariableProvider)?.invoke(proxyProvider, point) + ?: throw ConfigMissingProviderException(clazz) + } + + inline fun get(point: String) = get(T::class.java, point) + + @JvmStatic + fun registerConfigVariableProvider(clazz: Class, provider: ConfigVariableProvider) { + map[clazz] = provider + } + + inline fun registerConfigVariableProvider(noinline provider: ConfigVariableProvider) = + registerConfigVariableProvider(T::class.java, provider) + + + @JvmStatic + fun use(provider: ConfigProvider?) { + configProvider = provider + } + + @JvmStatic + fun getString(point: String): ConfigVariable { + return get(String::class.java, point) + } + +} \ No newline at end of file -- cgit