FastutilSerializers.java
package tools.jackson.datatype.fastutil;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonFormat;
import tools.jackson.databind.BeanDescription;
import tools.jackson.databind.SerializationConfig;
import tools.jackson.databind.ValueSerializer;
import tools.jackson.databind.jsontype.TypeSerializer;
import tools.jackson.databind.ser.Serializers;
import tools.jackson.databind.type.CollectionType;
import tools.jackson.databind.type.MapType;
import tools.jackson.datatype.fastutil.ser.PrimitiveCollectionSerializers;
import tools.jackson.datatype.fastutil.ser.map.PrimitivePrimitiveMapSerializers;
import tools.jackson.datatype.primitive_collections_base.ser.map.PrimitiveMapSerializer;
/**
* Serializers for fastutil collections and maps that contain primitive values.
* Since all fastutil containers implement the matching {@code java.util} interfaces,
* containers of references (like {@code ObjectList}), as well as maps with
* reference keys or values (like {@code Int2ObjectMap} or {@code Object2IntMap}),
* are left to the standard Jackson serializers: this way all their features
* (like content inclusion and custom key and content serializers) are supported.
*/
public class FastutilSerializers extends Serializers.Base
{
@Override
public ValueSerializer<?> findCollectionSerializer(SerializationConfig config,
CollectionType type, BeanDescription.Supplier beanDescRef,
JsonFormat.Value formatOverrides,
TypeSerializer elementTypeSerializer, ValueSerializer<Object> elementValueSerializer)
{
// Custom element serializers take boxed values: leave to standard serializer
if (elementValueSerializer != null) {
return null;
}
return PrimitiveCollectionSerializers.findSerializer(type.getRawClass());
}
@Override
public ValueSerializer<?> findMapSerializer(SerializationConfig config,
MapType type, BeanDescription.Supplier beanDescRef,
JsonFormat.Value formatOverrides,
ValueSerializer<Object> keySerializer,
TypeSerializer elementTypeSerializer, ValueSerializer<Object> elementValueSerializer)
{
// Custom key or value serializers take boxed values: leave to standard serializer
if (keySerializer != null || elementValueSerializer != null) {
return null;
}
// Primitive keys, primitive values
final Class<?> raw = type.getRawClass();
for (Map.Entry<Class<?>, PrimitiveMapSerializer<?>> entry
: PrimitivePrimitiveMapSerializers.getInstances().entrySet()) {
if (entry.getKey().isAssignableFrom(raw)) {
return entry.getValue();
}
}
return null;
}
}