// Path: RxJava/RxJavaExample/app/src/main/java/com/example/rxjavaexample/http/apimodel/TwitchAPI.java
// public interface TwitchAPI
// {
// 
//     @GET("streams")
//     Call<Twitch> getTopGames();
// 
//     @GET("streams")
//     Observable<Twitch> getTopGamesObservable();
// }
// 
// Path: RxJava/RxJavaExample/app/src/main/java/com/example/rxjavaexample/root/ApplicationContextModule.java
// @Module
// public class ApplicationContextModule
// {
// 
// 
//     private final Context context;
// 
// 
//     public ApplicationContextModule( Context context )
//     {
// 
//         this.context = context;
//     }
// 
// 
//     @Provides  // provides a dependency
//     public Context context()
//     {
// 
//         return context;
// 
//     }
// }


import android.content.Context;
import com.example.rxjavaexample.R;
import com.example.rxjavaexample.http.apimodel.TwitchAPI;
import com.example.rxjavaexample.root.ApplicationContextModule;
import java.io.IOException;
import dagger.Module;
import dagger.Provides;
import okhttp3.HttpUrl;
import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
                {
                    e.printStackTrace();
                    return null;
                }

            }
        } );


        HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();


        interceptor.setLevel( HttpLoggingInterceptor.Level.HEADERS );
        return httpClient.addInterceptor( interceptor )
                .build();

    }

    @Provides
    public Retrofit provideRetrofit( String baseURL, OkHttpClient client )
    {
        return new Retrofit.Builder()
                .baseUrl( baseURL )
                .client( client )
                .addConverterFactory( GsonConverterFactory.create() )
                .addCallAdapterFactory( RxJavaCallAdapterFactory.create() )
                .build();
    }

    @Provides
// Path: RxJava/RxJavaExample/app/src/main/java/com/example/rxjavaexample/http/apimodel/TwitchAPI.java
// public interface TwitchAPI
// {
// 
//     @GET("streams")
//     Call<Twitch> getTopGames();
// 
//     @GET("streams")
//     Observable<Twitch> getTopGamesObservable();
// }
// 
// Path: RxJava/RxJavaExample/app/src/main/java/com/example/rxjavaexample/root/ApplicationContextModule.java
// @Module
// public class ApplicationContextModule
// {
// 
// 
//     private final Context context;
// 
// 
//     public ApplicationContextModule( Context context )
//     {
// 
//         this.context = context;
//     }
// 
// 
//     @Provides  // provides a dependency
//     public Context context()
//     {
// 
//         return context;
// 
//     }
// }


// Path: RxJava/RxJavaExample/app/src/main/java/com/example/rxjavaexample/http/ApiModule.java
import android.content.Context;
import com.example.rxjavaexample.R;
import com.example.rxjavaexample.http.apimodel.TwitchAPI;
import com.example.rxjavaexample.root.ApplicationContextModule;
import java.io.IOException;
import dagger.Module;
import dagger.Provides;
import okhttp3.HttpUrl;
import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;

                {
                    e.printStackTrace();
                    return null;
                }

            }
        } );


        HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();


        interceptor.setLevel( HttpLoggingInterceptor.Level.HEADERS );
        return httpClient.addInterceptor( interceptor )
                .build();

    }

    @Provides
    public Retrofit provideRetrofit( String baseURL, OkHttpClient client )
    {
        return new Retrofit.Builder()
                .baseUrl( baseURL )
                .client( client )
                .addConverterFactory( GsonConverterFactory.create() )
                .addCallAdapterFactory( RxJavaCallAdapterFactory.create() )
                .build();
    }

    @Provides
    public TwitchAPI provideApiService(Context context)