package com.arellomobile.mvp.sample.github.di.modules;
import java.lang.reflect.Field;
import com.google.gson.FieldNamingPolicy;
import com.google.gson.FieldNamingStrategy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import javax.inject.Singleton;
import dagger.Module;
import dagger.Provides;
import retrofit2.Converter;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
import rx.schedulers.Schedulers;
/**
* Date: 8/26/2016
* Time: 12:28
*
* @author Artur Artikov
*/
@Module
public class RetrofitModule {
@Provides
@Singleton
public Retrofit provideRetrofit(Retrofit.Builder builder) {
return builder.baseUrl("https://api.github.com").build();
}
@Provides
@Singleton
public Retrofit.Builder provideRetrofitBuilder(Converter.Factory converterFactory) {
return new Retrofit.Builder()
.addCallAdapterFactory(RxJavaCallAdapterFactory.createWithScheduler(Schedulers.io()))
.addConverterFactory(converterFactory);
}
@Provides
@Singleton
public Converter.Factory provideConverterFactory(Gson gson) {
return GsonConverterFactory.create(gson);
}
@Provides
@Singleton
Gson provideGson() {
return new GsonBuilder()
.setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
.setFieldNamingStrategy(new CustomFieldNamingPolicy())
.setPrettyPrinting()
.setDateFormat("yyyy-MM-dd'T'HH:mm:ssZ")
.serializeNulls()
.create();
}
private static class CustomFieldNamingPolicy implements FieldNamingStrategy {
@Override
public String translateName(Field field) {
String name = FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES.translateName(field);
name = name.substring(2, name.length()).toLowerCase();
return name;
}
}
}