Skip to content

Instantly share code, notes, and snippets.

@joaortk
Created October 17, 2019 20:11
Show Gist options
  • Save joaortk/46b81fb9493a3e7156cd9179d143dac8 to your computer and use it in GitHub Desktop.
Save joaortk/46b81fb9493a3e7156cd9179d143dac8 to your computer and use it in GitHub Desktop.
import com.google.gson.FieldNamingPolicy
import com.google.gson.Gson
import com.google.gson.GsonBuilder
import com.google.gson.JsonDeserializer
import dagger.Module
import dagger.Provides
import dagger.Reusable
import okhttp3.OkHttpClient
import okhttp3.logging.HttpLoggingInterceptor
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
import retrofit2.converter.scalars.ScalarsConverterFactory
import java.util.*
import javax.inject.Singleton
@Module
class NetworkModule(private val baseUrl: String) {
@Provides
@Singleton
internal fun provideOkHttpClient(): OkHttpClient {
val httpLoggingInterceptor = HttpLoggingInterceptor()
httpLoggingInterceptor.level = HttpLoggingInterceptor.Level.BODY
val client = OkHttpClient.Builder()
.addInterceptor(httpLoggingInterceptor)
return client.build()
}
@Provides
@Reusable
fun provideGson(): Gson {
val gsonBuilder = GsonBuilder()
gsonBuilder.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
gsonBuilder.registerTypeAdapter(Date::class.java, JsonDeserializer { json, _, _ -> Date(json.asJsonPrimitive.asLong) })
return gsonBuilder.create()
}
@Provides
@Reusable
internal fun provideRetrofit(gson: Gson, okHttpClient: OkHttpClient): Retrofit {
return Retrofit.Builder()
.addConverterFactory(ScalarsConverterFactory.create())
.addConverterFactory(GsonConverterFactory.create(gson))
.baseUrl(baseUrl)
.client(okHttpClient)
.build()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment