stacycurl / pimpathon

Adds useful methods to scala & java classes.
Apache License 2.0
35 stars 9 forks source link

Add CodecJson[A].xmapDisjunction[B](A ⇒ String \/ B)(B => A): CodecJson[B] #247

Closed stacycurl closed 8 years ago

stacycurl commented 8 years ago

This is for creating codecs for enums where the representation is larger than the enum, eg: sealed trait Enum case object A extends Enum case object B extends Enum

object Enum { implicit val enumCodec: CodecJson[Enum] = CodecJson.derived[String].xmapDisjunction[Enum]({ case "A" => /-%28A) case "B" => \/-(B) case other => -\/(s"No such enum: $other) })(_.getClass.getSimpleName.stripSuffix("$")) }