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

com.fasterxml.jackson.module.scala.deser.OptionDeserializerModule.scala Maven / Gradle / Ivy

The newest version!
package com.fasterxml.jackson.module.scala.deser

import com.fasterxml.jackson.core.JsonParser;

import com.fasterxml.jackson.databind._;
import com.fasterxml.jackson.databind.jsontype.{TypeDeserializer};

import com.fasterxml.jackson.databind.`type`.CollectionLikeType;

import com.fasterxml.jackson.module.scala.modifiers.OptionTypeModifierModule
import deser.{ResolvableDeserializer, ContextualDeserializer, Deserializers}

private class OptionDeserializer(elementType: JavaType, var deser: JsonDeserializer[_])
  extends JsonDeserializer[Option[AnyRef]] with ContextualDeserializer {
  
  override def createContextual(ctxt: DeserializationContext, property: BeanProperty): JsonDeserializer[_] = {
    val cd = ctxt.findContextualValueDeserializer(elementType, property)
    if (cd != null) new OptionDeserializer(elementType, cd)
    else this
  }

  override def deserialize(jp: JsonParser, ctxt: DeserializationContext) =
    Option(deser.deserialize(jp, ctxt)).asInstanceOf[Option[AnyRef]]

  override def getNullValue = None
}

private object OptionDeserializerResolver extends Deserializers.Base {

  private val OPTION = classOf[Option[AnyRef]]

  override def findCollectionLikeDeserializer(theType: CollectionLikeType,
                                              config: DeserializationConfig,
                                              beanDesc: BeanDescription,
                                              elementTypeDeserializer: TypeDeserializer,
                                              elementDeserializer: JsonDeserializer[_]) =
    if (!OPTION.isAssignableFrom(theType.getRawClass)) null
    else new OptionDeserializer(theType.containedType(0), elementDeserializer)
}

trait OptionDeserializerModule extends OptionTypeModifierModule {
  this += OptionDeserializerResolver
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy