You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

49 lines
1.0 KiB

package nova.monadic_sfx.util.reactive.store
import monix.eval.Task
import monix.catnap.ConcurrentQueue
import monix.reactive.Observer
trait Sink[A, -B] {
def offer(inst: A, b: B): Task[Unit]
}
object Sink {
implicit def sinkForCq[B] =
new Sink[ConcurrentQueue[Task, B], B] {
override def offer(queue: ConcurrentQueue[Task, B], b: B): Task[Unit] =
queue.offer(b)
}
implicit def sinkForObserver[B] =
new Sink[Observer[B], B] {
override def offer(inst: Observer[B], b: B): Task[Unit] =
Task.deferFuture(inst.onNext(b)).void
}
implicit def sinkForStore[B, C] =
new Sink[Store[B, C], B] {
override def offer(inst: Store[B, C], b: B): Task[Unit] =
Task.deferFuture(inst.onNext(b)).void
}
// implicitly[Sink[Store[Int, Int], Int]]
}
trait Sink2[-B] {
def offer(b: B): monix.bio.Task[Unit]
}
object Sink2 {
def concurrentQueue[B](queue: ConcurrentQueue[monix.bio.Task, B]): Sink2[B] =
new Sink2[B] {
def offer(b: B): monix.bio.Task[Unit] = queue.offer(b)
}
}