aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/com/romangraef/jrconfig/TransformerConfigVariable.kt
blob: ae3840975fc295a6677ef3c0e8d2599d912876e1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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)
                }
            }
        }
    }

}