X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=blobdiff_plain;f=src%2Fmain%2Fkotlin%2Fnet%2Fpterodactylus%2Fsone%2Futils%2FDefaultOption.kt;fp=src%2Fmain%2Fkotlin%2Fnet%2Fpterodactylus%2Fsone%2Futils%2FDefaultOption.kt;h=fd4215f19da2c7daa5bc064271d5ba08cf04322e;hp=0000000000000000000000000000000000000000;hb=5c5bee980f9cab5792e34d1c9840f73b8b191830;hpb=faf66247a34f64946990a985d2ea3003465969cb diff --git a/src/main/kotlin/net/pterodactylus/sone/utils/DefaultOption.kt b/src/main/kotlin/net/pterodactylus/sone/utils/DefaultOption.kt new file mode 100644 index 0000000..fd4215f --- /dev/null +++ b/src/main/kotlin/net/pterodactylus/sone/utils/DefaultOption.kt @@ -0,0 +1,28 @@ +package net.pterodactylus.sone.utils + +/** + * Basic implementation of an [Option]. + * + * @param The type of the option + */ +class DefaultOption @JvmOverloads constructor( + private val defaultValue: T, + private val validator: ((T) -> Boolean)? = null +) : Option { + + @Volatile + private var value: T? = null + + override fun get() = value ?: defaultValue + + override fun getReal(): T? = value + + override fun validate(value: T?): Boolean = + value == null || validator?.invoke(value) ?: true + + override fun set(value: T?) { + require(validate(value)) { "New Value ($value) could not be validated." } + this.value = value + } + +}