diff options
Diffstat (limited to 'src/main/kotlin/com/romangraef/jrconfig/TransformerConfigVariable.kt')
-rw-r--r-- | src/main/kotlin/com/romangraef/jrconfig/TransformerConfigVariable.kt | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/main/kotlin/com/romangraef/jrconfig/TransformerConfigVariable.kt b/src/main/kotlin/com/romangraef/jrconfig/TransformerConfigVariable.kt new file mode 100644 index 0000000..ae38409 --- /dev/null +++ b/src/main/kotlin/com/romangraef/jrconfig/TransformerConfigVariable.kt @@ -0,0 +1,41 @@ +package com.romangraef.jrconfig + +import java.util.function.Function + +abstract class TransformerConfigVariable<T>(private val provider: ConfigProvider, private val point: String) : + ConfigVariable<T> { + protected abstract fun transform(value: String): T + protected abstract fun serialize(data: T): String + + override fun get(): T { + return transform(provider.provideData(point) ?: throw ConfigMissingException(point)) + } + + + override fun set(value: T) = + provider.setData(point, serialize(value)) + + + companion object { + /** + * Quick and dirty. Please consider using a subclass. + */ + fun <T> getVariable( + provider: ConfigProvider, + point: String, + transform: Function<String, T>, + serialize: Function<T, String> + ): TransformerConfigVariable<T> { + return object : TransformerConfigVariable<T>(provider, point) { + override fun transform(value: String): T { + return transform.apply(value) + } + + override fun serialize(data: T): String { + return serialize.apply(data) + } + } + } + } + +}
\ No newline at end of file |