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("$"))
}
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("$")) }