app/model/BlockingLevel.scala (26 lines of code) (raw):
package model
import enumeratum.EnumEntry.Uppercase
import enumeratum._
import play.api.libs.json._
import scala.collection.immutable.IndexedSeq
sealed trait BlockingLevel extends EnumEntry with Uppercase
object BlockingLevel extends Enum[BlockingLevel] {
override val values: IndexedSeq[BlockingLevel] = findValues
case object NONE extends BlockingLevel
case object SUGGEST extends BlockingLevel
case object FORCE extends BlockingLevel
override def withName(name: String): BlockingLevel = {
super.withName(name.toUpperCase)
}
implicit val format: Format[BlockingLevel] = new Format[BlockingLevel] {
def writes(level: BlockingLevel): JsValue = JsString(level.entryName)
def reads(json: JsValue): JsResult[BlockingLevel] = Reads.StringReads.reads(json).flatMap(v => {
val level = BlockingLevel.withName(v)
level match {
case BlockingLevel.NONE => JsSuccess(NONE)
case BlockingLevel.SUGGEST => JsSuccess(SUGGEST)
case BlockingLevel.FORCE => JsSuccess(FORCE)
}
})
}
}