Пользовательский отборщик для перечисления

У меня есть перечисление, которое я пытаюсь использовать для травления с использованием травления 0.8.0 и scala 2.11:

object CommandType extends Enumeration {
  val Push, Pop = Value
}

Травление не может сделать это автоматически в данный момент. Настраиваемый pickler-unpickler выглядит так:

class CommandTypePickler(implicit val format: PickleFormat)
  extends SPickler[CommandType.Value] with Unpickler[CommandType.Value] with LazyLogging {

  def pickle(picklee: CommandType.Value, builder: PBuilder): Unit = {
    builder.beginEntry(picklee)
    builder.putField("commandType", b =>
      b.hintTag(stringTag).beginEntry(picklee.toString).endEntry()
    )
    builder.endEntry()
  }

  override def unpickle(tag: => FastTypeTag[_], reader: PReader): CommandType.Value = {
    val ctReader = reader.readField("commandType")
    val tag = ctReader.beginEntry()
    logger.debug(s"tag is ${tag.toString}")
    val value = stringUnpickler.unpickle(tag, ctReader).asInstanceOf[String]
    ctReader.endEntry()

    CommandType.withName(value)
  }
}

Сериализованное перечисление:

{
  "tpe": "scala.Enumeration.Value",
  "commandType": {
    "tpe": "java.lang.String",
    "value": "Push"
  }
}

При снятии травления выбрасывается следующее: ScalaReflectionException: : class scala.Enumeration.Value in JavaMirror with sun.misc.Launcher$AppClassLoader@5c3eeab3 of type class sun.misc.Launcher$AppClassLoader with classpath ... not found, Что я делаю неправильно?

0 ответов

Другие вопросы по тегам