使い方
以下のように定義できる。
sealed trait Fruit
object Fruit extends AEnum[Fruit] {
case object Apple extends Fruit
case object Banana extends Fruit
case object Orange extends Fruit
implicit lazy val jsfmt: JsFormat[OpenEnum[Fruit]] = JsFormat.enum(enumNames)
implicit lazy val schema: Schema[OpenEnum[Fruit]] = Schema.enum(enumNames).named("Fruit")
implicit lazy val arbitrary = Deriving[Arbitrary[Fruit]]
implicit lazy val openEnumArbitrary: Arbitrary[OpenEnum[Fruit]] = Deriving[Arbitrary[OpenEnum[Fruit]]]
def enumNames: EnumNames[OpenEnum[Fruit]] = OpenEnum.enumNames(source)
override def namedValues: List[Enum.NamedValue[Fruit]] = Enum.values[Fruit]
}
OpenEnum[Fruite]]
型のオブジェクトは以下のように初期化することができる。(地味に詰まった。)
val apple: OpenEnum[Fruit] = OpenEnum(Fruit.Apple)
また、enumの名前をStringで取り出す方法は以下。
Fruit.Apple.toString // "Apple"