io.prestosql.jdbc.$internal.jackson.datatype.guava.deser.GuavaMultisetDeserializer Maven / Gradle / Ivy
The newest version!
package io.prestosql.jdbc.$internal.jackson.datatype.guava.deser;
import java.io.IOException;
import io.prestosql.jdbc.$internal.jackson.core.JsonParser;
import io.prestosql.jdbc.$internal.jackson.core.JsonProcessingException;
import io.prestosql.jdbc.$internal.jackson.core.JsonToken;
import io.prestosql.jdbc.$internal.jackson.databind.DeserializationContext;
import io.prestosql.jdbc.$internal.jackson.databind.JavaType;
import io.prestosql.jdbc.$internal.jackson.databind.JsonDeserializer;
import io.prestosql.jdbc.$internal.jackson.databind.deser.NullValueProvider;
import io.prestosql.jdbc.$internal.jackson.databind.jsontype.TypeDeserializer;
import io.prestosql.jdbc.$internal.guava.collect.Multiset;
abstract class GuavaMultisetDeserializer>
extends GuavaCollectionDeserializer
{
private static final long serialVersionUID = 1L;
GuavaMultisetDeserializer(JavaType selfType,
JsonDeserializer deser, TypeDeserializer typeDeser,
NullValueProvider nuller, Boolean unwrapSingle) {
super(selfType, deser, typeDeser, nuller, unwrapSingle);
}
protected abstract T createMultiset();
@Override
protected T _deserializeContents(JsonParser p, DeserializationContext ctxt) throws IOException,
JsonProcessingException {
JsonDeserializer valueDes = _valueDeserializer;
JsonToken t;
final TypeDeserializer typeDeser = _valueTypeDeserializer;
T set = createMultiset();
while ((t = p.nextToken()) != JsonToken.END_ARRAY) {
Object value;
if (t == JsonToken.VALUE_NULL) {
if (_skipNullValues) {
continue;
}
value = _nullProvider.getNullValue(ctxt);
} else if (typeDeser == null) {
value = valueDes.deserialize(p, ctxt);
} else {
value = valueDes.deserializeWithType(p, ctxt, typeDeser);
}
set.add(value);
}
return set;
}
@Override
protected T _createEmpty(DeserializationContext ctxt) throws IOException {
return createMultiset();
}
@Override
protected T _createWithSingleElement(DeserializationContext ctxt, Object value) throws IOException {
final T result = createMultiset();
result.add(value);
return result;
}
}