简体   繁体   English

如何在 Circe 中使用半自动解码通用案例类

[英]How to Decode a Generic Case Class with semiautomatic in Circe

I have the following case class:我有以下案例类:

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

It works with auto derivation.它适用于自动推导。

But I could not solve it to have a semiautomatic derivation.但是我无法解决它以进行半自动推导。

Here is my Test case:这是我的测试用例:

  //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

This gives me:这给了我:

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]]

Which version of circe are you using?你用的是哪个版本的circe? In 0.12.3 I have to use import io.circe.generic.semiauto._ and the following works for me:在 0.12.3 我必须使用import io.circe.generic.semiauto._并且以下对我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)))

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM