package com.jakewharton.u2020.data.api;
import com.jakewharton.u2020.data.api.oauth.OauthInterceptor;
import com.jakewharton.u2020.data.api.oauth.OauthService;
import com.squareup.moshi.Moshi;
import dagger.Module;
import dagger.Provides;
import javax.inject.Named;
import javax.inject.Singleton;
import okhttp3.HttpUrl;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import retrofit2.converter.moshi.MoshiConverterFactory;
@Module(
complete = false,
library = true,
injects = {
OauthService.class
}
)
public final class ApiModule {
public static final HttpUrl PRODUCTION_API_URL = HttpUrl.parse("https://api.github.com/");
@Provides @Singleton HttpUrl provideBaseUrl() {
return PRODUCTION_API_URL;
}
@Provides @Singleton @Named("Api") OkHttpClient provideApiClient(OkHttpClient client,
OauthInterceptor oauthInterceptor) {
return createApiClient(client, oauthInterceptor).build();
}
@Provides @Singleton Retrofit provideRetrofit(HttpUrl baseUrl, @Named("Api") OkHttpClient client,
Moshi moshi) {
return new Retrofit.Builder() //
.client(client) //
.baseUrl(baseUrl) //
.addConverterFactory(MoshiConverterFactory.create(moshi)) //
.addCallAdapterFactory(RxJavaCallAdapterFactory.create()) //
.build();
}
@Provides @Singleton GithubService provideGithubService(Retrofit retrofit) {
return retrofit.create(GithubService.class);
}
static OkHttpClient.Builder createApiClient(OkHttpClient client, OauthInterceptor oauthInterceptor) {
return client.newBuilder()
.addInterceptor(oauthInterceptor);
}
}