package io.gsonfire.gson;
import com.google.gson.Gson;
import com.google.gson.TypeAdapter;
import com.google.gson.TypeAdapterFactory;
import com.google.gson.reflect.TypeToken;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;
import java.io.IOException;
/**
* Created by julio on 9/6/16.
*/
public final class EnumDefaultValueTypeAdapterFactory<T extends Enum> implements TypeAdapterFactory {
private final Class<T> clazz;
private final T defaultValue;
public EnumDefaultValueTypeAdapterFactory(Class<T> clazz, T defaultValue) {
this.clazz = clazz;
this.defaultValue = defaultValue;
}
@Override
public <T> TypeAdapter<T> create(final Gson gson, final TypeToken<T> type) {
if(clazz.isAssignableFrom(type.getRawType())) {
final TypeAdapter<T> originalTypeAdapter = gson.getDelegateAdapter(EnumDefaultValueTypeAdapterFactory.this, type);
return new NullableTypeAdapter(
new TypeAdapter<T>() {
@Override
public void write(JsonWriter jsonWriter, T o) throws IOException {
originalTypeAdapter.write(jsonWriter, o);
}
@Override
public T read(JsonReader jsonReader) throws IOException {
T result = originalTypeAdapter.read(jsonReader);
if(result == null) {
return (T) defaultValue;
} else {
return result;
}
}
}
);
}
return null;
}
}