如何为所有Java枚举

时间:2015-06-04 14:58:33

标签: scala argonaut

我有一个使用大量Java代码的Scala项目,例如这个Java源代码:

public enum Category { FOO, BAR };

然后我有一堆Scala案例类,我使用Argonaut与JSON串行,如下所示:

case class Thing (a: String, b: Int, c: Float)
object Thing {
  implicit val j = casecodec3 (Thing.apply, Thing.unapply)("a", "b", "c")
  implicit val e: Equal[Guild] = Equal.equal (_ == _)
}

很好,现在我想编写一个使用Java枚举的Scala案例类:

case class Thing (a: String, b: Int, c: Float, d: Category)
object Thing {
  implicit val j = casecodec4 (Thing.apply, Thing.unapply)("a", "b", "c", "d")
  implicit val e: Equal[Guild] = Equal.equal (_ == _)
}

这将产生编译错误,因为类别枚举没有隐式编解码器。

我想我可以编写自己的编解码器专门用于处理类别枚举,通过这样做:

package object ArgonautImplicits {
  implicit val dx: DecodeJson[Category] = StringDecodeJson.map(x => Category.valueOf(x))
  implicit val ex: EncodeJson[Category] = EncodeJson(x => jString(x.toString))
}

但我想知道是否有办法编写一个能自动处理任何Java枚举的编解码器。

0 个答案:

没有答案