EclipseCollectionsSerializers.java
package tools.jackson.datatype.eclipsecollections;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonFormat;
import tools.jackson.databind.BeanDescription;
import tools.jackson.databind.JavaType;
import tools.jackson.databind.ValueSerializer;
import tools.jackson.databind.SerializationConfig;
import tools.jackson.databind.jsontype.TypeSerializer;
import tools.jackson.databind.ser.Serializers;
import tools.jackson.databind.ser.jdk.CollectionSerializer;
import tools.jackson.databind.type.CollectionLikeType;
import tools.jackson.datatype.eclipsecollections.ser.BooleanIterableSerializer;
import tools.jackson.datatype.eclipsecollections.ser.ByteIterableSerializer;
import tools.jackson.datatype.eclipsecollections.ser.CharIterableSerializer;
import tools.jackson.datatype.eclipsecollections.ser.DoubleIterableSerializer;
import tools.jackson.datatype.eclipsecollections.ser.FloatIterableSerializer;
import tools.jackson.datatype.eclipsecollections.ser.IntIterableSerializer;
import tools.jackson.datatype.eclipsecollections.ser.LongIterableSerializer;
import tools.jackson.datatype.eclipsecollections.ser.ShortIterableSerializer;
import tools.jackson.datatype.eclipsecollections.ser.map.PrimitivePrimitiveMapSerializers;
import tools.jackson.datatype.eclipsecollections.ser.map.PrimitiveRefMapSerializers;
import tools.jackson.datatype.eclipsecollections.ser.map.RefPrimitiveMapSerializers;
import tools.jackson.datatype.eclipsecollections.ser.map.RefRefMapIterableSerializer;
import tools.jackson.datatype.primitive_collections_base.ser.map.PrimitiveMapSerializer;
import org.eclipse.collections.api.BooleanIterable;
import org.eclipse.collections.api.ByteIterable;
import org.eclipse.collections.api.CharIterable;
import org.eclipse.collections.api.DoubleIterable;
import org.eclipse.collections.api.FloatIterable;
import org.eclipse.collections.api.IntIterable;
import org.eclipse.collections.api.LongIterable;
import org.eclipse.collections.api.PrimitiveIterable;
import org.eclipse.collections.api.ShortIterable;
import org.eclipse.collections.api.collection.ImmutableCollection;
import org.eclipse.collections.api.map.MapIterable;
import org.eclipse.collections.api.map.primitive.ByteObjectMap;
import org.eclipse.collections.api.map.primitive.CharObjectMap;
import org.eclipse.collections.api.map.primitive.DoubleObjectMap;
import org.eclipse.collections.api.map.primitive.FloatObjectMap;
import org.eclipse.collections.api.map.primitive.IntObjectMap;
import org.eclipse.collections.api.map.primitive.LongObjectMap;
import org.eclipse.collections.api.map.primitive.ObjectBooleanMap;
import org.eclipse.collections.api.map.primitive.ObjectByteMap;
import org.eclipse.collections.api.map.primitive.ObjectCharMap;
import org.eclipse.collections.api.map.primitive.ObjectDoubleMap;
import org.eclipse.collections.api.map.primitive.ObjectFloatMap;
import org.eclipse.collections.api.map.primitive.ObjectIntMap;
import org.eclipse.collections.api.map.primitive.ObjectLongMap;
import org.eclipse.collections.api.map.primitive.ObjectShortMap;
import org.eclipse.collections.api.map.primitive.PrimitiveObjectMap;
import org.eclipse.collections.api.map.primitive.ShortObjectMap;
public final class EclipseCollectionsSerializers extends Serializers.Base {
@Override
public ValueSerializer<?> findCollectionLikeSerializer(
SerializationConfig config,
CollectionLikeType type,
BeanDescription.Supplier beanDescRef,
JsonFormat.Value formatOverrides,
TypeSerializer elementTypeSerializer,
ValueSerializer<Object> elementValueSerializer
) {
if (ImmutableCollection.class.isAssignableFrom(type.getRawClass())) {
return new CollectionSerializer(
type.getContentType(),
false,
elementTypeSerializer,
elementValueSerializer
);
}
return null;
}
@Override
public ValueSerializer<?> findSerializer(SerializationConfig config,
JavaType type, BeanDescription.Supplier beanDescRef, JsonFormat.Value formatOverrides)
{
Class<?> rawClass = type.getRawClass();
if (MapIterable.class.isAssignableFrom(rawClass)) {
return new RefRefMapIterableSerializer(type, null, null, null, null);
}
if (PrimitiveObjectMap.class.isAssignableFrom(rawClass)) {
if (ByteObjectMap.class.isAssignableFrom(rawClass)) {
return new PrimitiveRefMapSerializers.Byte<>(type, null, null, null);
} else if (ShortObjectMap.class.isAssignableFrom(rawClass)) {
return new PrimitiveRefMapSerializers.Short<>(type, null, null, null);
} else if (CharObjectMap.class.isAssignableFrom(rawClass)) {
return new PrimitiveRefMapSerializers.Char<>(type, null, null, null);
} else if (IntObjectMap.class.isAssignableFrom(rawClass)) {
return new PrimitiveRefMapSerializers.Int<>(type, null, null, null);
} else if (FloatObjectMap.class.isAssignableFrom(rawClass)) {
return new PrimitiveRefMapSerializers.Float<>(type, null, null, null);
} else if (LongObjectMap.class.isAssignableFrom(rawClass)) {
return new PrimitiveRefMapSerializers.Long<>(type, null, null, null);
} else if (DoubleObjectMap.class.isAssignableFrom(rawClass)) {
return new PrimitiveRefMapSerializers.Double<>(type, null, null, null);
}
}
if (PrimitiveIterable.class.isAssignableFrom(rawClass)) {
if (ObjectBooleanMap.class.isAssignableFrom(rawClass)) {
return new RefPrimitiveMapSerializers.Boolean<>(type, null, null);
} else if (ObjectByteMap.class.isAssignableFrom(rawClass)) {
return new RefPrimitiveMapSerializers.Byte<>(type, null, null);
} else if (ObjectShortMap.class.isAssignableFrom(rawClass)) {
return new RefPrimitiveMapSerializers.Short<>(type, null, null);
} else if (ObjectCharMap.class.isAssignableFrom(rawClass)) {
return new RefPrimitiveMapSerializers.Char<>(type, null, null);
} else if (ObjectIntMap.class.isAssignableFrom(rawClass)) {
return new RefPrimitiveMapSerializers.Int<>(type, null, null);
} else if (ObjectFloatMap.class.isAssignableFrom(rawClass)) {
return new RefPrimitiveMapSerializers.Float<>(type, null, null);
} else if (ObjectLongMap.class.isAssignableFrom(rawClass)) {
return new RefPrimitiveMapSerializers.Long<>(type, null, null);
} else if (ObjectDoubleMap.class.isAssignableFrom(rawClass)) {
return new RefPrimitiveMapSerializers.Double<>(type, null, null);
}
for (Map.Entry<Class<? extends PrimitiveIterable>, PrimitiveMapSerializer<?>> entry :
PrimitivePrimitiveMapSerializers.getInstances().entrySet()) {
if (entry.getKey().isAssignableFrom(rawClass)) {
return entry.getValue();
}
}
if (BooleanIterable.class.isAssignableFrom(rawClass)) {
return new BooleanIterableSerializer(null, null);
} else if (ByteIterable.class.isAssignableFrom(rawClass)) {
return ByteIterableSerializer.INSTANCE;
} else if (ShortIterable.class.isAssignableFrom(rawClass)) {
return new ShortIterableSerializer(null, null);
} else if (CharIterable.class.isAssignableFrom(rawClass)) {
return CharIterableSerializer.INSTANCE;
} else if (IntIterable.class.isAssignableFrom(rawClass)) {
return new IntIterableSerializer(null, null);
} else if (FloatIterable.class.isAssignableFrom(rawClass)) {
return new FloatIterableSerializer(null, null);
} else if (LongIterable.class.isAssignableFrom(rawClass)) {
return new LongIterableSerializer(null, null);
} else if (DoubleIterable.class.isAssignableFrom(rawClass)) {
return new DoubleIterableSerializer(null, null);
}
}
return super.findSerializer(config, type, beanDescRef, formatOverrides);
}
}