我有一个特征Processor
,如下所示:
trait Processor[A] {
def process(in: Seq[Byte]): Result[A]
}
trait Result[A]{
val ok: Boolean
val errorMessage: Option[String]
val data: Option[A]
}
具体实施:
class StringProc extends Processor[String] {
def process(in: Seq[Byte]): StrResult
}
case class StrResult(...) extends Result[String]
object StrResult {
implicit val writes = Json.writes[StrResult]
}
使用StringProc
实例作为Processor[String]
类型时,process
的返回类型不出所料是Result[String]
,而不是StrResult
。不幸的是,Writes[StrResult]
在这种情况下似乎毫无用处:
找不到类型为Result [String]
的Json序列化程序
我怎么能处理这种情况?
答案 0 :(得分:6)
你可以尝试
object Result {
implicit def resWrites[T](implicit nested: Writes[T]): Writes[Result[T]] = OWrites[Result[T]] { res =>
Json.obj("ok" -> res.ok, "errorMessage" -> res.errorMessage,
"data" -> nested.writes(res.data))
}
}