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.
|
|
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) } }
|