47 lines
1.4 KiB
Java
47 lines
1.4 KiB
Java
package tc.oc.api.serialization;
|
|
|
|
import java.lang.reflect.Type;
|
|
import java.util.Map;
|
|
import java.util.Set;
|
|
import javax.inject.Singleton;
|
|
|
|
import com.google.gson.Gson;
|
|
import com.google.gson.GsonBuilder;
|
|
import com.google.gson.TypeAdapterFactory;
|
|
import com.google.inject.Provides;
|
|
import tc.oc.commons.core.inject.Manifest;
|
|
|
|
public class SerializationManifest extends Manifest {
|
|
|
|
private static final String ISO8601_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ssX";
|
|
|
|
@Override
|
|
protected void configure() {
|
|
install(new TypeAdaptersManifest());
|
|
}
|
|
|
|
@Provides
|
|
GsonBuilder gsonBuilder(Set<TypeAdapterFactory> factories, Map<Type, Object> adapters, Map<Class, Object> hiearchyAdapters) {
|
|
GsonBuilder builder = new GsonBuilder()
|
|
.setDateFormat(ISO8601_DATE_FORMAT)
|
|
.serializeSpecialFloatingPointValues() // Infinity and NaN
|
|
.serializeNulls(); // Needed so we can clear fields in PartialModel document updates
|
|
|
|
factories.forEach(builder::registerTypeAdapterFactory);
|
|
adapters.forEach(builder::registerTypeAdapter);
|
|
hiearchyAdapters.forEach(builder::registerTypeHierarchyAdapter);
|
|
|
|
return builder;
|
|
}
|
|
|
|
@Provides @Singleton
|
|
Gson gson(GsonBuilder builder) {
|
|
return builder.create();
|
|
}
|
|
|
|
@Provides @Singleton @Pretty
|
|
Gson prettyGson(GsonBuilder builder) {
|
|
return builder.setPrettyPrinting().create();
|
|
}
|
|
}
|