aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/com/romangraef/jrconfig/TransformerConfigVariable.kt
blob: e1034c25e946968c68d76da5204366cdc0d2896c (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
42
43
44
45
46
47
package com.romangraef.jrconfig

import java.util.function.Function

abstract class TransformerConfigVariable<T>(private val provider: ConfigSaveLoadProvider, 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))
    }

    override fun defaultValue(t: T?): ConfigVariable<T> = if (t == null) {
        this
    } else {
        DefaultConfigVariable(this, t)
    }

    companion object {
        /**
         * Quick and dirty. Please consider using a subclass.
         */
        fun <T> getVariable(
            provider: ConfigSaveLoadProvider,
            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)
                }
            }
        }
    }

}