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

agni.monix.Task.scala Maven / Gradle / Ivy

The newest version!
package agni
package monix

import java.util.concurrent.Executor

import _root_.cats.MonadError
import _root_.monix.eval.{ Task => MTask }
import _root_.monix.execution._
import agni.util.Futures
import com.datastax.oss.driver.api.core.CqlSession
import com.datastax.oss.driver.api.core.cql.BoundStatement

abstract class Task
  extends Async[MTask, Throwable] {

  override implicit val F: MonadError[MTask, Throwable] = cats.taskToMonadError

  override def getAsync[A: Get](stmt: BoundStatement)(implicit s: CqlSession): MTask[A] =
    MTask.async0 { (scheduler, cb) =>
      val f = Futures.async[A](
        s.executeAsync(stmt),
        _.fold(cb.onError, cb.onSuccess),
        new Executor {
          override def execute(command: Runnable): Unit =
            scheduler.execute(command)
        }
      )
      f(ver(s))
      Cancelable()
    }
}

object Task {
  implicit val monixTaskInstance: Async[MTask, Throwable] = new Task() {}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy