Как правильно использовать Either с IO? - PullRequest
2 голосов
/ 07 апреля 2019

У меня есть 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)
      })
  }
}

Это работает, но у меня есть несколько проблем с этим. Первая проблема не решена. Второе: я думаю, что это можно сделать проще, не так ли? Я не могу найти правильные методы, чтобы сделать это лучше.

...