package com.romangraef.jrconfig import java.util.function.Function abstract class TransformerConfigVariable(private val provider: ConfigProvider, private val point: String) : ConfigVariable { 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 getVariable( provider: ConfigProvider, point: String, transform: Function, serialize: Function ): TransformerConfigVariable { return object : TransformerConfigVariable(provider, point) { override fun transform(value: String): T { return transform.apply(value) } override fun serialize(data: T): String { return serialize.apply(data) } } } } }