繁体   English   中英

具有默认参数的通用 case 类的 Circe 编码器

[英]Circe encoder for generic case class with default parameters

我希望为以下案例类提供 JSON 编码器:

import io.circe.generic.extras.Configuration

final case class Hello[T](
    source: String, 
    version: Int = 1,
    data: T
)

object Hello {
  implicit val configuration: Configuration = Configuration.default.withDefaults
}

我通常会在伴随对象中调用deriveEncoder[A] ,但这在这里不起作用,因为这里没有T参考或Encoder可用。

Hello类型将作为一个库提供给客户端,所以我希望在这种类型中尽可能多地做样板,而不是依赖于提供编码器和解码器的客户端代码。 是否有使用 circe 的惯用解决方案,以便客户端为T提供编码器/解码器,并用于派生Hello[T]的编码器/解码器?

是的,您需要添加一个上下文绑定,要求对任何类型T都存在隐式编码器:

import io.circe.gemeric.semiauto._

final case class Hello[T](
  source: String,
  version: Int = 1,
  data: T
)

object Hello {
  implicit def helloEncoder[T: Encoder]: Encoder[Hello[T]] = deriveEncoder
}

这样当用户创建他们自己的Hello[Foo]类型时,他们必须确保Foo有自己的编码器。

暂无
暂无

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

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