import play.api.libs.json.{Format, JsValue, Json}
enum Age {
case Old, Young
}
case class Person(name: String, age: Option[Age])
object Person {
given Format[Age] = summon[Format[String]].bimap[Age](s => Age.valueOf(s), age => age.toString)
given Format[Person] = Json.format[Person]
}
@main def Main(): Unit = {
import Age.*
val person = Person("KIM", Some(Young))
val js: JsValue = Json.toJson(person)
val s: String = js.toString
val js2: JsValue = Json.parse(s)
val p: Person = js2.as[Person]
println(p)
}