Я использую эту библиотеку 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
и после этого просто на java UUID
, а затем все правильно компилируется без ошибок.Проблема только с FUUID
и, вероятно, с преобразованием.Я пытался использовать Circe Integration
, как показано в ссылке FUUID
выше, но это не помогло.Вы знаете, как исправить этот код, чтобы компилировать все с fuuid
и circe
?Я новичок в cats
и подключенных библиотеках, так что, возможно, это простая ошибка, но сейчас это не тривиально для меня.