package scala.sys
trait BooleanProp extends Prop[Boolean] {
def value: Boolean
def enable(): Unit
def disable(): Unit
def toggle(): Unit
}
object BooleanProp {
private[sys]
class BooleanPropImpl(key: String, valueFn: String => Boolean) extends PropImpl(key, valueFn) with BooleanProp {
override def setValue[T1 >: Boolean](newValue: T1): Boolean = newValue match {
case x: Boolean if !x => val old = value ; clear() ; old
case x => super.setValue(newValue)
}
def enable() = this setValue true
def disable() = this.clear()
def toggle() = if (value) disable() else enable()
}
private[sys]
class ConstantImpl(val key: String, val value: Boolean) extends BooleanProp {
val isSet = value
def set(newValue: String) = "" + value
def setValue[T1 >: Boolean](newValue: T1): Boolean = value
def get: String = "" + value
val clear, enable, disable, toggle = ()
def option = if (isSet) Some(value) else None
protected def zero = false
}
def valueIsTrue[T](key: String): BooleanProp = new BooleanPropImpl(key, _.toLowerCase == "true")
def keyExists[T](key: String): BooleanProp = new BooleanPropImpl(key, _ => true)
def constant(key: String, isOn: Boolean): BooleanProp = new ConstantImpl(key, isOn)
implicit def booleanPropAsBoolean(b: BooleanProp): Boolean = b.value
}