package com.fasterxml.jackson.datatype.joda.deser;
import java.io.IOException;
import com.fasterxml.jackson.core.*;
import com.fasterxml.jackson.core.io.NumberInput;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.cfg.CoercionAction;
import com.fasterxml.jackson.databind.deser.std.StdScalarDeserializer;
import com.fasterxml.jackson.databind.jsontype.TypeDeserializer;
import com.fasterxml.jackson.databind.type.LogicalType;
import com.fasterxml.jackson.databind.util.ClassUtil;
@SuppressWarnings("serial")
abstract class JodaDeserializerBase<T> extends StdScalarDeserializer<T>
{
protected JodaDeserializerBase(Class<?> cls) {
super(cls);
}
protected JodaDeserializerBase(JodaDeserializerBase<?> src) {
super(src);
}
@Override
public Object deserializeWithType(JsonParser p, DeserializationContext ctxt,
TypeDeserializer typeDeserializer) throws IOException
{
return typeDeserializer.deserializeTypedFromAny(p, ctxt);
}
@Override
public LogicalType logicalType() { return LogicalType.DateTime; }
protected boolean _isValidTimestampString(String str) {
return _isIntNumber(str) && NumberInput.inLongRange(str, (str.charAt(0) == '-'));
}
@SuppressWarnings("unchecked")
protected T _fromEmptyString(JsonParser p, DeserializationContext ctxt,
String str)
throws IOException
{
final CoercionAction act = _checkFromStringCoercion(ctxt, str);
switch (act) {
case AsEmpty:
return (T) getEmptyValue(ctxt);
case TryConvert:
case AsNull:
default:
}
return null;
}
@SuppressWarnings("unchecked")
public T _handleNotNumberOrString(JsonParser p, DeserializationContext ctxt)
throws IOException
{
final JavaType type = getValueType(ctxt);
return (T) ctxt.handleUnexpectedToken(type, p.currentToken(), p,
String.format("Cannot deserialize value of type %s from `JsonToken.%s`: expected Number or String",
ClassUtil.getTypeDescription(type), p.currentToken()));
}
}