Я использую эту библиотеку https://christopherdavenport.github.io/fuuid/ для создания ID
пользовательских объект и сохранить их в базе данных. У меня есть простая case class
, моя модель:
import io.chrisdavenport.fuuid.FUUID
case class Bet(
betId: Option[FUUID],
home: String,
away: String,
stake: BigDecimal,
betType: String)
Я использовал FUUID
здесь как параметр Option
. У меня также есть routes
, созданный с Http4s
, который должен принимать json из ввода и отображать его в модель:
class BettingRoutes[F[_] : Async](service: BettingService[F]) extends Http4sDsl[F] {
def routes: HttpRoutes[F] = HttpRoutes.of[F] {
case req@PUT -> Root / "bets" =>
for {
bet <- req.as[Bet]
created <- service.put(bet)
response <- Created(created)
} yield response
}
}
Я также добавил несколько implicits
для кодирования и декодирования из Circe
:
object jsons {
implicit def circeDecoder[A[_] : Sync, B: Decoder]: EntityDecoder[A, B] = jsonOf[A, B]
implicit def circeEncoder[A[_] : Sync, B: Encoder]: EntityEncoder[A, B] = jsonEncoderOf[A, B]
}
Проблема в том, что когда я хочу скомпилировать проект, я получаю такие ошибки в классе маршрута:
Error:(23, 22) Cannot decode into a value of type model.Bet, because no EntityDecoder[F, model.Bet] instance could be found.
bet <- req.as[Bet]
Error:(23, 22) not enough arguments for method as: (implicit F: cats.Functor[F], implicit decoder: org.http4s.EntityDecoder[F,model.Bet])F[model.Bet].
Unspecified value parameter decoder.
bet <- req.as[Bet]
Error:(25, 28) Cannot convert from model.Bet to an Entity, because no EntityEncoder[F, model.Bet] instance could be found.
response <- Created(created)
и т.д. Я исследовал это, и он появляется из-за использования FUUID
. Я изменил все классы FUUID
на Long
, а после этого только на UUID
java, а затем все правильно компилируется без ошибок. Проблема только в FUUID
и, вероятно, в его преобразовании. Я пробовал использовать Circe Integration
, как показано в ссылке FUUID
выше, но это не помогло. Вы знаете, как исправить этот код, чтобы все скомпилировать с fuuid
и circe
? Я новичок в cats
и связанных библиотеках, так что, возможно, это простая ошибка, но сейчас для меня это нетривиально.