⬆️ Upgrade to Kotlin 1.7
[Sone.git] / src / main / kotlin / net / pterodactylus / sone / utils / DefaultOption.kt
1 package net.pterodactylus.sone.utils
2
3 /**
4  * Basic implementation of an [Option].
5  *
6  * @param <T> The type of the option
7  */
8 class DefaultOption<T> @JvmOverloads constructor(
9                 private val defaultValue: T,
10                 private val validator: ((T) -> Boolean)? = null
11 ) : Option<T> {
12
13         @Volatile
14         private var value: T? = null
15
16         override fun get() = value ?: defaultValue
17
18         override fun getReal(): T? = value
19
20         override fun validate(value: T?): Boolean =
21                         value == null || validator?.invoke(value) ?: true
22
23         override fun set(value: T?) {
24                 require(validate(value)) { "New Value ($value) could not be validated." }
25                 this.value = value
26         }
27
28 }