Circe diverveDecoder / diverveEncoder не удалось найти неявное неявное значение типа io.circe.generi c .encoding.DerivedAsObjectEncoder - PullRequest
0 голосов
/ 03 февраля 2020

Я пытаюсь сгенерировать кодеры и декодеры для двух классов дел:

object EventBusCases {
  case class ValuationRequest(function: RequestValue = ALL_DAY_VALS, interval: RequestValue = IntraDayIntervals.MIN_5)
  implicit val requestDecoder: Decoder[ValuationRequest] = deriveDecoder[ValuationRequest]
  implicit val requestEncoder: Encoder[ValuationRequest] = deriveEncoder[ValuationRequest]

  case class ValuationResponse(values: List[Valuation], function: RequestValue)
  implicit val responseDecoder: Decoder[ValuationResponse] = deriveDecoder[ValuationResponse]
  implicit val responseEncoder: Encoder[ValuationResponse] = deriveEncoder[ValuationResponse]
}

Я продолжаю получать ошибки, подобные этой, но для обоих случаев: could not find Lazy implicit value of type io.circe.generic.encoding.DerivedAsObjectEncoder[eventbus.eventBusCases.ValuationResponse]

Я решил также попытайтесь получить кодировщики и декодеры для пользовательских классов внутри них, таких как «Оценка», но я просто получаю ту же ошибку на этих.

Я использую Circe 0.12.3 и Scala 2.12.8, и они мои зависимости от Circe Scala:

  "com.beachape" %% "enumeratum" % "1.5.14",
  "com.beachape" %% "enumeratum-circe" % "1.5.22",
  "io.circe" %% "circe-core" % "0.12.3",
  "io.circe" %% "circe-generic" % "0.12.3",
  "io.circe" %% "circe-parser" % "0.12.3"

1 Ответ

0 голосов
/ 10 февраля 2020

Таким образом, я нашел способ выполнить эту работу - реализовать кодеры и декодеры как для ValuationRequest и ValuationResponse, так и для всех пользовательских типов, содержащихся в них.

Для ValuationRequest и ValuationResponse я в основном добавил этот бит в один и тот же файл, содержащий оба класса дел:

object derivation {
  implicit val encodeResponse: Encoder[ValuationResponse] = Encoder.instance {
    case response @ ValuationResponse(_,_) => response.asJson
  }
  implicit val decodeResponse: Decoder[ValuationResponse] =
    List[Decoder[ValuationResponse]](
      Decoder[ValuationResponse].widen
    ).reduceLeft(_ or _)

  implicit val encodeRequest: Encoder[ValuationRequest] = Encoder.instance {
    case response @ ValuationRequest(_,_) => response.asJson
  }
  implicit val decodeRequest: Decoder[ValuationRequest] =
    List[Decoder[ValuationRequest]](
      Decoder[ValuationRequest].widen
    ).reduceLeft(_ or _)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...