All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.rojoma.json.v3.jackson.fasterxml.deserializers.scala Maven / Gradle / Ivy

package com.rojoma.json.v3.jackson
package fasterxml

import com.fasterxml.jackson.core.{JsonToken, JsonParser}
import com.fasterxml.jackson.databind.{JsonDeserializer, DeserializationContext}
import com.rojoma.json.v3.ast._

import scala.collection.mutable

class JObjectDeserializer extends JsonDeserializer[JObject] {
  override def deserialize(jp: JsonParser, ctxt: DeserializationContext): JObject = {
    if(jp.getCurrentToken != JsonToken.START_OBJECT) throw ctxt.mappingException(classOf[JObject])
    if(jp.nextToken() == JsonToken.END_OBJECT) return JObject.canonicalEmpty
    val result = new mutable.LinkedHashMap[String, JValue]
    while(jp.getCurrentToken != JsonToken.END_OBJECT) {
      val k = jp.getCurrentName
      jp.nextToken()
      val v = JValueDeserializer.deserialize(jp, ctxt)
      jp.nextToken()
      result += k -> v
    }
    JObject(result)
  }
  override val handledType = classOf[JObject]
}
object JObjectDeserializer extends JObjectDeserializer

class JArrayDeserializer extends JsonDeserializer[JArray] {
  override def deserialize(jp: JsonParser, ctxt: DeserializationContext): JArray = {
    if(jp.getCurrentToken != JsonToken.START_ARRAY) throw ctxt.mappingException(classOf[JArray])
    if(jp.nextToken() == JsonToken.END_ARRAY) return JArray.canonicalEmpty
    val result = Vector.newBuilder[JValue]
    while(jp.getCurrentToken != JsonToken.END_ARRAY) {
      val v = JValueDeserializer.deserialize(jp, ctxt)
      jp.nextToken()
      result += v
    }
    JArray(result.result())
  }
  override val handledType = classOf[JArray]
}
object JArrayDeserializer extends JArrayDeserializer

class JStringDeserializer extends JsonDeserializer[JString] {
  override def deserialize(jp: JsonParser, ctxt: DeserializationContext): JString = {
    if(jp.getCurrentToken != JsonToken.VALUE_STRING) throw ctxt.mappingException(classOf[JString])
    JString(jp.getText)
  }
  override val handledType = classOf[JString]
}
object JStringDeserializer extends JStringDeserializer

class JBooleanDeserializer extends JsonDeserializer[JBoolean] {
  override def deserialize(jp: JsonParser, ctxt: DeserializationContext): JBoolean = {
    jp.getCurrentToken match {
      case JsonToken.VALUE_FALSE => JBoolean.canonicalFalse
      case JsonToken.VALUE_TRUE => JBoolean.canonicalTrue
      case _ => throw ctxt.mappingException(classOf[JBoolean])
    }
  }
  override val handledType = classOf[JBoolean]
}
object JBooleanDeserializer extends JBooleanDeserializer

class JNumberDeserializer extends JsonDeserializer[JNumber] {
  override def deserialize(jp: JsonParser, ctxt: DeserializationContext): JNumber = {
    jp.getCurrentToken match {
      case JsonToken.VALUE_NUMBER_INT => JNumber.unsafeFromString(jp.getText)
      case JsonToken.VALUE_NUMBER_FLOAT => JNumber.unsafeFromString(jp.getText)
      case _ => throw ctxt.mappingException(classOf[JNumber])
    }
  }
  override val handledType = classOf[JBoolean]
}
object JNumberDeserializer extends JNumberDeserializer

class JNullDeserializer extends JsonDeserializer[JNull] {
  override def deserialize(jp: JsonParser, ctxt: DeserializationContext): JNull = {
    if(jp.getCurrentToken != JsonToken.VALUE_NULL) throw ctxt.mappingException(classOf[JNull])
    JNull
  }
  override val getNullValue = JNull
  override val handledType = classOf[JNull]
}
object JNullDeserializer extends JNullDeserializer

class JValueDeserializer extends JsonDeserializer[JValue] {
  override def deserialize(jp: JsonParser, ctxt: DeserializationContext): JValue = {
    jp.getCurrentToken match {
      case JsonToken.START_OBJECT => JObjectDeserializer.deserialize(jp, ctxt)
      case JsonToken.START_ARRAY => JArrayDeserializer.deserialize(jp, ctxt)
      case JsonToken.VALUE_STRING => JStringDeserializer.deserialize(jp, ctxt)
      case JsonToken.VALUE_FALSE | JsonToken.VALUE_TRUE => JBooleanDeserializer.deserialize(jp, ctxt)
      case JsonToken.VALUE_NUMBER_INT | JsonToken.VALUE_NUMBER_FLOAT => JNumberDeserializer.deserialize(jp, ctxt)
      case JsonToken.VALUE_NULL => JNullDeserializer.deserialize(jp, ctxt)
      case _ => throw ctxt.mappingException(classOf[JValue])
    }
  }
  override val getNullValue = JNull
  override val handledType = classOf[JValue]
}
object JValueDeserializer extends JValueDeserializer

class JCompoundDeserializer extends JsonDeserializer[JCompound] {
  override def deserialize(jp: JsonParser, ctxt: DeserializationContext): JCompound = {
    jp.getCurrentToken match {
      case JsonToken.START_OBJECT => JObjectDeserializer.deserialize(jp, ctxt)
      case JsonToken.START_ARRAY => JArrayDeserializer.deserialize(jp, ctxt)
      case _ => throw ctxt.mappingException(classOf[JCompound])
    }
  }
  override val handledType = classOf[JCompound]
}
object JCompoundDeserializer extends JCompoundDeserializer

class JAtomDeserializer extends JsonDeserializer[JAtom] {
  override def deserialize(jp: JsonParser, ctxt: DeserializationContext): JAtom = {
    jp.getCurrentToken match {
      case JsonToken.VALUE_STRING => JStringDeserializer.deserialize(jp, ctxt)
      case JsonToken.VALUE_FALSE | JsonToken.VALUE_TRUE => JBooleanDeserializer.deserialize(jp, ctxt)
      case JsonToken.VALUE_NUMBER_INT | JsonToken.VALUE_NUMBER_FLOAT => JNumberDeserializer.deserialize(jp, ctxt)
      case JsonToken.VALUE_NULL => JNullDeserializer.deserialize(jp, ctxt)
      case _ => throw ctxt.mappingException(classOf[JValue])
    }
  }
  override val getNullValue = JNull
  override val handledType = classOf[JValue]
}
object JAtomDeserializer extends JAtomDeserializer




© 2015 - 2025 Weber Informatics LLC | Privacy Policy