// Path: app/src/main/java/com/lucilu/rxdynamicsearch/data/pojo/Country.java
// public final class Country {
// 
//     @NonNull
//     @SerializedName("name")
//     private final String mName;
// 
//     @NonNull
//     @SerializedName("capital")
//     private final String mCapital;
// 
//     @NonNull
//     @SerializedName("region")
//     private final String mRegion;
// 
//     public Country(@NonNull final String name,
//                    @NonNull final String capital,
//                    @NonNull final String region) {
//         mName = get(name);
//         mCapital = get(capital);
//         mRegion = get(region);
//     }
// 
//     @NonNull
//     public String getName() {
//         return mName;
//     }
// 
//     @NonNull
//     public String getCapital() {
//         return mCapital;
//     }
// 
//     @NonNull
//     public String getRegion() {
//         return mRegion;
//     }
// 
//     @Override
//     public boolean equals(final Object o) {
//         if (this == o) {
//             return true;
//         }
//         if (o == null || getClass() != o.getClass()) {
//             return false;
//         }
// 
//         final Country country = (Country) o;
// 
//         if (!mName.equals(country.mName)) {
//             return false;
//         }
//         if (!mCapital.equals(country.mCapital)) {
//             return false;
//         }
//         return mRegion.equals(country.mRegion);
// 
//     }
// 
//     @Override
//     public int hashCode() {
//         int result = mName.hashCode();
//         result = 31 * result + mCapital.hashCode();
//         result = 31 * result + mRegion.hashCode();
//         return result;
//     }
// 
//     @Override
//     public String toString() {
//         return "Country{" +
//                "mName='" + mName + '\'' +
//                ", mCapital='" + mCapital + '\'' +
//                ", mRegion='" + mRegion + '\'' +
//                '}';
//     }
// }
// 
// Path: app/src/main/java/com/lucilu/rxdynamicsearch/provider/base/IJsonParserProvider.java
// public interface IJsonParserProvider {
// 
//     /**
//      * Parses from
//      *
//      * @param rawResourceId the id to the raw json file in resources
//      * @param classOfType   the class of the type of the objects in the list
//      * @param <T>           the type of the objects in the list
//      * @return option of the list. Can be {@link Option#NONE} if the parsing fails.
//      */
//     <T> Option<List<T>> parseListFromRawJsonFile(final int rawResourceId,
//                                                  @NonNull final Class<T> classOfType);
// }
// 
// Path: app/src/main/java/com/lucilu/rxdynamicsearch/repository/base/ICountryRepository.java
// public interface ICountryRepository {
// 
//     /**
//      * Gets all the countries.
//      *
//      * @return list with all the countries.
//      */
//     @NonNull
//     Observable<Option<List<Country>>> getAllCountries();
// }
// 
// Path: app/src/main/java/com/lucilu/rxdynamicsearch/utils/Preconditions.java
// @NonNull
// public static <T> T get(@Nullable final T reference) {
//     if (reference == null) {
//         throw new NullPointerException("Assertion for a nonnull object failed.");
//     }
//     return reference;
// }


import com.lucilu.rxdynamicsearch.R;
import com.lucilu.rxdynamicsearch.data.pojo.Country;
import com.lucilu.rxdynamicsearch.provider.base.IJsonParserProvider;
import com.lucilu.rxdynamicsearch.repository.base.ICountryRepository;
import android.support.annotation.NonNull;
import java.util.List;
import polanski.option.Option;
import rx.Observable;
import rx.Subscriber;
import rx.schedulers.Schedulers;
import static com.lucilu.rxdynamicsearch.utils.Preconditions.get;
package com.lucilu.rxdynamicsearch.repository;






public class CountryRepository implements ICountryRepository {

    @NonNull
    private final IJsonParserProvider mJsonParserProvider;

    public CountryRepository(@NonNull final IJsonParserProvider jsonParserProvider) {
// Path: app/src/main/java/com/lucilu/rxdynamicsearch/data/pojo/Country.java
// public final class Country {
// 
//     @NonNull
//     @SerializedName("name")
//     private final String mName;
// 
//     @NonNull
//     @SerializedName("capital")
//     private final String mCapital;
// 
//     @NonNull
//     @SerializedName("region")
//     private final String mRegion;
// 
//     public Country(@NonNull final String name,
//                    @NonNull final String capital,
//                    @NonNull final String region) {
//         mName = get(name);
//         mCapital = get(capital);
//         mRegion = get(region);
//     }
// 
//     @NonNull
//     public String getName() {
//         return mName;
//     }
// 
//     @NonNull
//     public String getCapital() {
//         return mCapital;
//     }
// 
//     @NonNull
//     public String getRegion() {
//         return mRegion;
//     }
// 
//     @Override
//     public boolean equals(final Object o) {
//         if (this == o) {
//             return true;
//         }
//         if (o == null || getClass() != o.getClass()) {
//             return false;
//         }
// 
//         final Country country = (Country) o;
// 
//         if (!mName.equals(country.mName)) {
//             return false;
//         }
//         if (!mCapital.equals(country.mCapital)) {
//             return false;
//         }
//         return mRegion.equals(country.mRegion);
// 
//     }
// 
//     @Override
//     public int hashCode() {
//         int result = mName.hashCode();
//         result = 31 * result + mCapital.hashCode();
//         result = 31 * result + mRegion.hashCode();
//         return result;
//     }
// 
//     @Override
//     public String toString() {
//         return "Country{" +
//                "mName='" + mName + '\'' +
//                ", mCapital='" + mCapital + '\'' +
//                ", mRegion='" + mRegion + '\'' +
//                '}';
//     }
// }
// 
// Path: app/src/main/java/com/lucilu/rxdynamicsearch/provider/base/IJsonParserProvider.java
// public interface IJsonParserProvider {
// 
//     /**
//      * Parses from
//      *
//      * @param rawResourceId the id to the raw json file in resources
//      * @param classOfType   the class of the type of the objects in the list
//      * @param <T>           the type of the objects in the list
//      * @return option of the list. Can be {@link Option#NONE} if the parsing fails.
//      */
//     <T> Option<List<T>> parseListFromRawJsonFile(final int rawResourceId,
//                                                  @NonNull final Class<T> classOfType);
// }
// 
// Path: app/src/main/java/com/lucilu/rxdynamicsearch/repository/base/ICountryRepository.java
// public interface ICountryRepository {
// 
//     /**
//      * Gets all the countries.
//      *
//      * @return list with all the countries.
//      */
//     @NonNull
//     Observable<Option<List<Country>>> getAllCountries();
// }
// 
// Path: app/src/main/java/com/lucilu/rxdynamicsearch/utils/Preconditions.java
// @NonNull
// public static <T> T get(@Nullable final T reference) {
//     if (reference == null) {
//         throw new NullPointerException("Assertion for a nonnull object failed.");
//     }
//     return reference;
// }


// Path: app/src/main/java/com/lucilu/rxdynamicsearch/repository/CountryRepository.java
import com.lucilu.rxdynamicsearch.R;
import com.lucilu.rxdynamicsearch.data.pojo.Country;
import com.lucilu.rxdynamicsearch.provider.base.IJsonParserProvider;
import com.lucilu.rxdynamicsearch.repository.base.ICountryRepository;
import android.support.annotation.NonNull;
import java.util.List;
import polanski.option.Option;
import rx.Observable;
import rx.Subscriber;
import rx.schedulers.Schedulers;
import static com.lucilu.rxdynamicsearch.utils.Preconditions.get;

package com.lucilu.rxdynamicsearch.repository;






public class CountryRepository implements ICountryRepository {

    @NonNull
    private final IJsonParserProvider mJsonParserProvider;

    public CountryRepository(@NonNull final IJsonParserProvider jsonParserProvider) {
        mJsonParserProvider = get(jsonParserProvider);