package nova.monadic_sfx import scala.concurrent.duration._ import _root_.monix.bio.Task import cats.implicits._ import io.odin._ import io.odin.config._ import io.odin.syntax._ import nova.monadic_sfx.actors.ActorModule import nova.monadic_sfx.http.HttpModule import nova.monadic_sfx.ui.UiModule import nova.monadic_sfx.util.reactive.Middlewares trait MainModule extends ActorModule with UiModule with HttpModule { def routerLogger(defaultLogger: Logger[Task], storeLogger: Logger[Task]) = enclosureRouting[Task]( "nova.monadic_sfx.util.reactive.Middlewares" -> storeLogger, "nova.monadic_sfx.util.reactive.Store" -> storeLogger ) .withFallback(defaultLogger) .withAsync() def makeLogger = for { defaultLogger <- consoleLogger[Task]() .withAsync(timeWindow = 1.millis) |+| fileLogger[Task]( "application.log" ).withAsync() middlewareLogger <- consoleLogger[ Task ](formatter = Middlewares.format) .withMinimalLevel(Level.Trace) .withAsync() |+| fileLogger[Task]( "stores.log", formatter = Middlewares.format ).withAsync() routerLogger <- routerLogger(defaultLogger, middlewareLogger) } yield (routerLogger) }