package com.fasterxml.jackson.dataformat.avro.jsr310.deser;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.deser.std.StdScalarDeserializer;
import com.fasterxml.jackson.databind.type.LogicalType;
import java.io.IOException;
import java.time.ZoneId;
import static com.fasterxml.jackson.core.JsonToken.VALUE_NUMBER_INT;
public abstract class AvroJavaTimeDeserializerBase<T> extends StdScalarDeserializer<T> {
protected AvroJavaTimeDeserializerBase(Class<T> supportedType) {
super(supportedType);
}
@Override
public LogicalType logicalType() {
return LogicalType.DateTime;
}
@SuppressWarnings("unchecked")
@Override
public T deserialize(JsonParser p, DeserializationContext context) throws IOException {
if (p.getCurrentToken() == VALUE_NUMBER_INT) {
final ZoneId defaultZoneId = context.getTimeZone().toZoneId().normalized();
return fromLong(p.getLongValue(), defaultZoneId);
} else {
return (T) context.handleUnexpectedToken(_valueClass, p);
}
}
protected abstract T fromLong(long longValue, ZoneId defaultZoneId);
}