【问题标题】:How to Decode a Generic Case Class with semiautomatic in Circe如何在 Circe 中使用半自动解码通用案例类
【发布时间】:2020-05-16 11:48:12
【问题描述】:

我有以下案例类:

case class QueryResult[T: Decoder](data: T)

它适用于自动推导。

但我无法解决它以进行半自动推导。

这是我的测试用例:

  //import io.circe.generic.auto._ // with this it works
  import io.circe.derivation._

  case class Name(name: String)
  case class QueryResult[T: Decoder](data: T)

  implicit val nameDer = deriveDecoder[Name]
  implicit def result[T: Decoder] = deriveDecoder[QueryResult[T]] // this does not work

这给了我:

Error:(16, 50) No method evidence$1 in pme123.graphql.client.QueryResult[T] (this is probably because a constructor parameter isn't a val)
  implicit def result[T: Decoder] = deriveDecoder[QueryResult[T]]

【问题讨论】:

    标签: scala generics circe generic-derivation


    【解决方案1】:

    您使用的是哪个版本的 circe?在 0.12.3 中,我必须使用 import io.circe.generic.semiauto._,以下对我有用:

    case class Name(name: String)
    case class QueryResult[T: Decoder](data: T)
    
    implicit val nameDer = deriveDecoder[Name]
    implicit def result[T: Decoder] = deriveDecoder[QueryResult[T]]
    
    val json = """{"data": {"name": "foo"}}"""
    decode[QueryResult[Name]](json)  // Right(QueryResult(Name(foo)))
    

    【讨论】:

    • 谢谢,原来问题是我为了简化示例而省略的案例类的另一个参数;(。错误消息令人困惑。
    猜你喜欢
    • 1970-01-01
    • 2019-03-15
    • 2018-05-03
    • 1970-01-01
    • 2019-03-13
    • 1970-01-01
    • 2019-06-05
    • 2020-03-27
    • 2018-10-22
    相关资源
    最近更新 更多