diff --git a/core/js/src/main/scala/canoe/api/clients/AjaxClient.scala b/core/js/src/main/scala/canoe/api/clients/AjaxClient.scala index 410a4a0d..01f67fb9 100644 --- a/core/js/src/main/scala/canoe/api/clients/AjaxClient.scala +++ b/core/js/src/main/scala/canoe/api/clients/AjaxClient.scala @@ -19,14 +19,20 @@ private[api] class AjaxClient[F[_]: Async: ContextShift](token: String) extends */ def execute[Req, Res](request: Req)(implicit M: Method[Req, Res]): F[Res] = { implicit val responseDecoder: Decoder[Response[Res]] = Response.decoder[Res](M.decoder) - console.log(s"Executing ${M.name}") sendJsonRequest(request, M).map(decode[Response[Res]]).flatMap { - case Left(error) => ResponseDecodingError(error.toString).raiseError[F, Res] + case Left(error) => handleUnknownEntity(M.name, request, error.getMessage) case Right(response) => handleTelegramResponse(M, request)(response) } } + private def handleUnknownEntity[I, A](method: String, input: I, error: String): F[A] = { + console.error( + s"Received unknown Telegram entity during execution of '$method' method. \nInput data: $input. \n${error}" + ) + ResponseDecodingError(error.toString).raiseError[F, A] + } + private def handleTelegramResponse[A, I, C](m: Method[I, A], input: I)(response: Response[A]): F[A] = response match { case Response(true, Some(result), _, _, _) => result.pure[F] diff --git a/core/shared/src/main/scala/canoe/api/sources/Polling.scala b/core/shared/src/main/scala/canoe/api/sources/Polling.scala index 8d9abbb2..eef7f5b9 100644 --- a/core/shared/src/main/scala/canoe/api/sources/Polling.scala +++ b/core/shared/src/main/scala/canoe/api/sources/Polling.scala @@ -1,11 +1,13 @@ package canoe.api.sources -import canoe.api.{ResponseDecodingError, UpdateSource} +import canoe.api.{ResponseDecodingError, UpdateSource, TelegramClient} import canoe.methods.updates.GetUpdates import canoe.models.Update import canoe.syntax.methodOps import cats.ApplicativeError import cats.effect.Timer +import cats.syntax.functor.toFunctorOps +import cats.syntax.applicativeError.catsSyntaxApplicativeError import fs2.Stream import io.circe.parser.decode