package com.doumee.lib_coremodel.di.module; 
 | 
  
 | 
  
 | 
import androidx.annotation.Nullable; 
 | 
  
 | 
import com.doumee.lib_coremodel.config.AppliesOptions; 
 | 
import com.doumee.lib_coremodel.http.InterceptorConfig; 
 | 
import com.doumee.lib_coremodel.http.interceptor.LogInterceptor; 
 | 
import com.google.gson.Gson; 
 | 
import com.google.gson.GsonBuilder; 
 | 
import com.king.retrofit.retrofithelper.RetrofitHelper; 
 | 
  
 | 
import javax.inject.Singleton; 
 | 
  
 | 
import dagger.Module; 
 | 
import dagger.Provides; 
 | 
import dagger.hilt.InstallIn; 
 | 
import dagger.hilt.components.SingletonComponent; 
 | 
import okhttp3.HttpUrl; 
 | 
import okhttp3.OkHttpClient; 
 | 
import retrofit2.Retrofit; 
 | 
import retrofit2.converter.gson.GsonConverterFactory; 
 | 
  
 | 
/** 
 | 
 * @author <a href="mailto:jenly1314@gmail.com">Jenly</a> 
 | 
 */ 
 | 
@InstallIn(SingletonComponent.class) 
 | 
@Module 
 | 
public class HttpModule { 
 | 
  
 | 
  
 | 
    @Singleton 
 | 
    @Provides 
 | 
    Retrofit provideRetrofit(Retrofit.Builder builder, @Nullable AppliesOptions.RetrofitOptions options){ 
 | 
        if(options != null){ 
 | 
            options.applyOptions(builder); 
 | 
        } 
 | 
        return builder.build(); 
 | 
    } 
 | 
  
 | 
    @Singleton 
 | 
    @Provides 
 | 
    OkHttpClient provideOkHttpClient(OkHttpClient.Builder builder, @Nullable AppliesOptions.OkHttpClientOptions options){ 
 | 
        if(options != null) { 
 | 
            options.applyOptions(builder); 
 | 
        } 
 | 
        return builder.build(); 
 | 
    } 
 | 
  
 | 
    @Singleton 
 | 
    @Provides 
 | 
    Gson provideGson(GsonBuilder builder, @Nullable AppliesOptions.GsonOptions options){ 
 | 
        if(options != null){ 
 | 
            options.applyOptions(builder); 
 | 
        } 
 | 
        return builder.create(); 
 | 
    } 
 | 
  
 | 
    @Singleton 
 | 
    @Provides 
 | 
    Retrofit.Builder provideRetrofitBuilder(HttpUrl httpUrl, OkHttpClient client, Gson gson, InterceptorConfig config) { 
 | 
        Retrofit.Builder builder = new Retrofit.Builder(); 
 | 
            builder.baseUrl(httpUrl) 
 | 
                    .client(client); 
 | 
            if(config.isAddGsonConverterFactory()){ 
 | 
                builder.addConverterFactory(GsonConverterFactory.create(gson)); 
 | 
            } 
 | 
  
 | 
        return builder; 
 | 
    } 
 | 
  
 | 
    @Singleton 
 | 
    @Provides 
 | 
    OkHttpClient.Builder provideClientBuilder(InterceptorConfig config) { 
 | 
        OkHttpClient.Builder builder = RetrofitHelper.getInstance().createClientBuilder(); 
 | 
  
 | 
        if(config.isAddLog()){ 
 | 
            builder.addInterceptor(new LogInterceptor()); 
 | 
        } 
 | 
  
 | 
        return builder; 
 | 
    } 
 | 
  
 | 
    @Singleton 
 | 
    @Provides 
 | 
    GsonBuilder provideGsonBuilder(){ 
 | 
        return new GsonBuilder(); 
 | 
    } 
 | 
  
 | 
    @Singleton 
 | 
    @Provides 
 | 
    InterceptorConfig provideInterceptorConfig(InterceptorConfig.Builder builder, @Nullable AppliesOptions.InterceptorConfigOptions options){ 
 | 
        if(options != null){ 
 | 
            options.applyOptions(builder); 
 | 
        } 
 | 
        return builder.build(); 
 | 
    } 
 | 
  
 | 
    @Singleton 
 | 
    @Provides 
 | 
    InterceptorConfig.Builder provideInterceptorConfigBuilder(){ 
 | 
        return InterceptorConfig.newBuilder(); 
 | 
    } 
 | 
  
 | 
  
 | 
} 
 |