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 io.gsonfire.ClassConfig;
/**
* @autor: julio
*/
public final class FireTypeAdapterFactory<T> implements TypeAdapterFactory {
private final ClassConfig<T> classConfig;
public FireTypeAdapterFactory(ClassConfig<T> classConfig) {
this.classConfig = classConfig;
}
@Override
public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type) {
if(classConfig.getConfiguredClass().isAssignableFrom(type.getRawType())){
TypeAdapter<T> originalTypeAdapter = gson.getDelegateAdapter(this, type);
FireTypeAdapter<T> fireTypeAdapter = new FireTypeAdapter<T>((Class<T>)type.getRawType(), (ClassConfig<T>) classConfig, originalTypeAdapter, gson);
return fireTypeAdapter;
} else {
return null;
}
}
}