aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/com/romangraef/jrconfig/TransformerConfigVariable.kt
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/kotlin/com/romangraef/jrconfig/TransformerConfigVariable.kt')
-rw-r--r--src/main/kotlin/com/romangraef/jrconfig/TransformerConfigVariable.kt41
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