我期待为以下案例类提供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
}
Run Code Online (Sandbox Code Playgroud)
我通常会叫deriveEncoder[A]的同伴对象,但因为没有参考或已经不在这里工作Encoder了T这里.
该Hello类型将作为库提供给客户端,因此我希望在此类型中尽可能多地使用样板,而不是依赖于提供编码器和解码器的客户端代码.是否有一个惯用的解决方案与circe,以便客户端提供编码器/解码器T,这用于导出编码器/解码器Hello[T]?
是的,您需要添加一个上下文绑定,要求任何类型都存在隐式编码器T:
final case class Hello[T](
source: String,
version: Int = 1,
data: T
)
object Hello {
implicit def helloEncoder[T: Encoder]: Encoder[Hello[T]] = deriveEncoder
}
Run Code Online (Sandbox Code Playgroud)
这样,当用户创建自己的Hello[Foo]类型时,他必须确保Foo拥有自己的编码器.
| 归档时间: |
|
| 查看次数: |
468 次 |
| 最近记录: |