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._ import com.softwaremill.macwire._ 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 <- actorSystemResource(logger) reqs <- Resource.liftF(Task(wireWith(requesters _))) schedulers <- Resource.liftF(Task(new Schedulers())) fxApp <- wireWith(fxAppResource _) } yield (fxApp) appResource .use(fxApp => Task(fxApp.main(args.toArray))) .as(ExitCode.Success) } }