case class HydraQueueMessage(tableType: HydraTableName.Value, payload: String)
object MedusaElementFormat extends DefaultJsonProtocol {
implicit object HydraElementFormat extends RootJsonFormat[HydraQueueMessage] {
def write(message: HydraQueueMessage) = JsObject(
MedusaEnum.HydraTableName.toString -> JsString(message.tableType.toString),
"payload" -> JsString(message.payload)
)
def read(value: JsValue) = {
value.asJsObject.getFields("tableType", "payload") match {
case Seq(JsString(tableType), JsString(payload)) =>
new HydraQueueMessage(tableType = tableType, payload = payload)
}
}
}
}
В этом примере есть пропуская встреча типа, есть ли более чистый способ достичь этого? И все еще имея tableType
как значение, а не строку?пользовательский распылитель-json маршаллер для класса корпуса с типом значения
Мой маршаллер выбрасывает совпадение типа с типом значения, я также не могу настроить JsValue. Итак, как мне перейти на маршал класса HydraQueueMessage
без использования строкового типа для tableType
?