Я создал простой собственный тип: type MyEnv = ZEnv with Clock with MyRepository
и имею метод Main
:
object Main extends App {
lazy val live: ZLayer[Any, Nothing, Has[MyRepository.Service]] = ZLayer.succeed(LiveMyRepository.repository)
val routes = Router[AppTask](
"/" -> MyRoutes.routes
).orNotFound
val server: ZIO[MyEnv, Throwable, Unit] = ZIO.runtime[MyEnv]
.flatMap {
implicit rts =>
BlazeServerBuilder[AppTask]
.bindHttp(config.port, config.host)
.withHttpApp(routes)
.serve
.compile
.drain
}
def run(args: List[String]): ZIO[ZEnv, Nothing, Int] = {
server.provideCustomLayer(live) foldM(
err => putStrLn(s"Execution failed with: $err") *> IO.succeed(1),
_ => IO.succeed(0))
}
Но я получил ошибку компиляции в методе run
:
Error:(33, 30) Cannot prove that zio.ZEnv with zio.Has[my.repositories.MyRepository.Service] <:< my.application.Environment.MyEnv.
server.provideCustomLayer(live) foldM(
Я не знаю, как это исправить. Также у меня есть ошибка, связанная с неявным в server.provideCustomLayer(live)
:
No parameter found for implicits ev: ZEnv with Has[MyRepository.Service] <:< MyEnv
Я пытался найти решение, но документация ZIO
настолько бесполезна, и в других местах нет хорошего решения.