package com.fasterxml.jackson.databind.deser.std;
import java.io.IOException;
import com.fasterxml.jackson.core.*;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.databind.jsontype.TypeDeserializer;
import com.fasterxml.jackson.databind.util.AccessPattern;
/**
* Base class for deserializers that handle types that are serialized
* as JSON scalars (non-structured, i.e. non-Object, non-Array, values).
*/
public abstract class StdScalarDeserializer<T> extends StdDeserializer<T>
{
private static final long serialVersionUID = 1L;
protected StdScalarDeserializer(Class<?> vc) { super(vc); }
protected StdScalarDeserializer(JavaType valueType) { super(valueType); }
// since 2.5
protected StdScalarDeserializer(StdScalarDeserializer<?> src) { super(src); }
@Override
public Object deserializeWithType(JsonParser p, DeserializationContext ctxt, TypeDeserializer typeDeserializer) throws IOException {
return typeDeserializer.deserializeTypedFromScalar(p, ctxt);
}
/**
* Overridden to simply call <code>deserialize()</code> method that does not take value
* to update, since scalar values are usually non-mergeable.
*/
@Override // since 2.9
public T deserialize(JsonParser p, DeserializationContext ctxt, T intoValue) throws IOException {
// 25-Oct-2016, tatu: And if attempt is made, see if we are to complain...
ctxt.reportBadMerge(this);
// except that it is possible to suppress this; and if so...
return deserialize(p, ctxt);
}
/**
* By default assumption is that scalar types can not be updated: many are immutable
* values (such as primitives and wrappers)
*/
@Override // since 2.9
public Boolean supportsUpdate(DeserializationConfig config) {
return Boolean.FALSE;
}
// Typically Scalar values have default setting of "nulls as nulls"
@Override
public AccessPattern getNullAccessPattern() {
return AccessPattern.ALWAYS_NULL;
}
// While some scalar types have non-null empty values (hence can't say "ALWAYS_NULL")
// they are mostly immutable, shareable and so constant.
@Override // since 2.9
public AccessPattern getEmptyAccessPattern() {
return AccessPattern.CONSTANT;
}
}