All Downloads are FREE. Search and download functionalities are using the official Maven repository.

reactify.reaction.Reaction.scala Maven / Gradle / Ivy

package reactify.reaction

import reactify.Priority

/**
  * Reaction may be considered similar to `Observer` or `Listener` in other libraries. A Reaction may be added to a
  * Reactive in order to react when a value is fired upon it.
  *
  * @tparam T the type received by this Reaction
  */
trait Reaction[T] extends Ordered[Reaction[T]] {
  /**
    * Invoked when a new value is received by the associated Reactive
    *
    * @param value the new value
    * @param previous the previous value, if one was defined
    * @return
    */
  def apply(value: T, previous: Option[T]): ReactionStatus

  /**
    * Priority of this Reaction in contrast to other Reactions attached to the same Reactive. A higher value represents
    * a higher position in reactions list. See Priority for pre-defined values.
    */
  def priority: Double = Priority.Normal

  override def compare(that: Reaction[T]): Int = this.priority.compare(that.priority)
}

object Reaction {
  def apply[T](f: T => Unit, priority: Double = Priority.Normal): Reaction[T] = FunctionReaction[T](f, priority)

  def changes[T](f: (T, T) => Unit, priority: Double = Priority.Normal): Reaction[T] = {
    ChangeFunctionReaction[T](f, priority)
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy