2

将 circe 从 0.4.1 升级到 0.7.0 破坏了以下代码:

import shapeless._
import syntax.singleton._
import io.circe.generic.auto._

.run[Record.`'transaction_id -> Int`.T](transport)

def run[A](transport: Json => Future[Json])(implicit decoder: Decoder[A], exec: ExecutionContext): Future[A]

出现以下错误:

 could not find implicit value for parameter decoder: io.circe.Decoder[shapeless.::[Int with shapeless.labelled.KeyTag[Symbol with shapeless.tag.Tagged[String("transaction_id")],Int],shapeless.HNil]]
[error]       .run[Record.`'transaction_id -> Int`.T](transport)
[error]                                              ^

我在这里错过了一些导入,还是这些编码器/解码器不再可用?

4

1 回答 1

2

在 circe 0.6.0 版本中,Shapeless 的 hlists、records 等实例被移至单独的 circe-shapes 模块。如果将此模块添加到构建中,则以下内容应该可以工作:

import io.circe.jawn.decode, io.circe.shapes._
import shapeless._, record.Record, syntax.singleton._

val doc = """{ "transaction_id": 1 }"""

val res = decode[Record.`'transaction_id -> Int`.T](doc)

移动这些实例的动机是 0.6 中引入的改进的泛型派生意味着它们不再是必需的,并且在不需要它们时将它们排除在隐式范围之外既干净又可能支持更快的编译时间。新的 circe-shapes 模块还包括 circe-generic 中不可用的功能,例如联产品的实例。

于 2017-03-29T17:50:51.237 回答