package nova.monadic_sfx import monix.eval.Task // import sttp.client.asynchttpclient.monix.AsyncHttpClientMonixBackend // import sttp.client._ // import sttp.client.circe._ // import io.circe.generic.auto._ import nova.monadic_sfx.executors._ import cats.effect.Resource import sttp.client.asynchttpclient.monix.AsyncHttpClientMonixBackend import io.odin.syntax._ import io.odin.monix._ import monix.eval.TaskApp import cats.effect.ExitCode import cats.implicits._ object Main extends MainModule with TaskApp { override def run(args: List[String]): Task[ExitCode] = { // val startTime = Task.clock // .monotonic(scala.concurrent.duration.MILLISECONDS) // .map(Duration.fromNanos(_)) lazy val appResource = for { // clock <- Resource.liftF(Task(Task.clock)) logger <- consoleLogger().withAsync() backend <- AsyncHttpClientMonixBackend.resource() actorSystem <- actorResource(logger) reqs <- Resource.liftF(Task(requesters(backend, actorSystem))) schedulers <- Resource.liftF(Task(new Schedulers())) fxApp <- fxAppResource(logger, backend, actorSystem, reqs, schedulers) } yield (fxApp) appResource .use(fxApp => Task(fxApp.main(args.toArray))) .as(ExitCode.Success) } }