app/models/BakeStatus.scala (24 lines of code) (raw):

package models import org.scanamo.DynamoFormat import org.scanamo.{DynamoReadError, TypeCoercionError} import enumeratum._ import cats.syntax.either._ sealed abstract class BakeStatus extends EnumEntry object BakeStatus extends Enum[BakeStatus] { val values = findValues case object Running extends BakeStatus case object Complete extends BakeStatus case object Failed extends BakeStatus case object TimedOut extends BakeStatus case object DeletionScheduled extends BakeStatus implicit val dynamoFormat: DynamoFormat[BakeStatus] = { def fromString(s: String): Either[DynamoReadError, BakeStatus] = Either.fromOption( withNameOption(s), TypeCoercionError( new IllegalArgumentException(s"Invalid bake status: $s") ) ) DynamoFormat.xmap[BakeStatus, String](fromString, _.entryName) } }