У меня есть AkkaHttp
клиент и cats
библиотека. Я хотел бы избежать исключения исключения, поэтому я написал этот код:
class AkkaHttpJokeClient(url: String)(implicit system: ActorSystem) extends JokeClient[IO] {
override def getJoke(): IO[Either[Throwable, Joke]] = {
implicit val materializer: ActorMaterializer = ActorMaterializer()
implicit val ec: ExecutionContext = system.dispatcher
IO.fromFuture(IO {
Http()
.singleRequest(HttpRequest(uri = url))
.flatMap(Unmarshal(_).to[String])
.map(x => Try{x.parseJson.convertTo[Joke]}.toEither)
})
}
}
Это работает, но у меня есть несколько проблем с этим. Первая проблема не решена. Второе: я думаю, что это можно сделать проще, не так ли? Я не могу найти правильные методы, чтобы сделать это лучше.