// Path: placesautocomplete/src/main/java/com/seatgeek/placesautocomplete/json/JsonParsingException.java
// public class JsonParsingException extends IOException {
// 
//     public JsonParsingException() {
//     }
// 
//     public JsonParsingException(final String detailMessage) {
//         super(detailMessage);
//     }
// 
//     public JsonParsingException(final String detailMessage, final Throwable throwable) {
//         super(detailMessage, throwable);
//     }
// 
//     public JsonParsingException(final Throwable throwable) {
//         super(throwable);
//     }
// }
// 
// Path: placesautocomplete/src/main/java/com/seatgeek/placesautocomplete/json/PlacesApiJsonParser.java
// public interface PlacesApiJsonParser {
//     PlacesAutocompleteResponse autocompleteFromStream(InputStream is) throws JsonParsingException;
// 
//     PlacesDetailsResponse detailsFromStream(InputStream is) throws JsonParsingException;
// 
//     List<Place> readHistoryJson(InputStream in) throws JsonParsingException;
// 
//     void writeHistoryJson(OutputStream os, List<Place> places) throws JsonWritingException;
// }
// 
// Path: placesautocomplete/src/main/java/com/seatgeek/placesautocomplete/model/PlacesApiResponse.java
// public class PlacesApiResponse {
// 
//     /**
//      * API response status. Can and should be used to see if a request was successful
//      */
//     public final Status status;
// 
//     /**
//      * If !status.isSuccessful(), should return an en error message about what went wrong
//      */
//     public final String error_message;
// 
//     public PlacesApiResponse(final Status status, final String error_message) {
//         this.status = status;
//         this.error_message = error_message;
//     }
// }
// 
// Path: placesautocomplete/src/main/java/com/seatgeek/placesautocomplete/model/PlacesAutocompleteResponse.java
// public final class PlacesAutocompleteResponse extends PlacesApiResponse {
// 
//     /**
//      * A list of predicted places from the api based on the given input
//      */
//     public final List<Place> predictions;
// 
//     public PlacesAutocompleteResponse(final Status status, final String error_message, final List<Place> predictions) {
//         super(status, error_message);
//         this.predictions = predictions;
//     }
// }
// 
// Path: placesautocomplete/src/main/java/com/seatgeek/placesautocomplete/model/PlacesDetailsResponse.java
// public final class PlacesDetailsResponse extends PlacesApiResponse {
// 
//     public final PlaceDetails result;
// 
//     public PlacesDetailsResponse(final Status status, final String error_message, final PlaceDetails result) {
//         super(status, error_message);
//         this.result = result;
//     }
// }


import android.net.Uri;
import com.seatgeek.placesautocomplete.json.JsonParsingException;
import com.seatgeek.placesautocomplete.json.PlacesApiJsonParser;
import com.seatgeek.placesautocomplete.model.PlacesApiResponse;
import com.seatgeek.placesautocomplete.model.PlacesAutocompleteResponse;
import com.seatgeek.placesautocomplete.model.PlacesDetailsResponse;
import java.io.IOException;
import java.io.InputStream;
package com.seatgeek.placesautocomplete.network;




abstract class AbstractPlacesHttpClient implements PlacesHttpClient {

    protected final PlacesApiJsonParser placesApiJsonParser;

    protected AbstractPlacesHttpClient(PlacesApiJsonParser parser) {
        placesApiJsonParser = parser;
    }

    @Override
// Path: placesautocomplete/src/main/java/com/seatgeek/placesautocomplete/json/JsonParsingException.java
// public class JsonParsingException extends IOException {
// 
//     public JsonParsingException() {
//     }
// 
//     public JsonParsingException(final String detailMessage) {
//         super(detailMessage);
//     }
// 
//     public JsonParsingException(final String detailMessage, final Throwable throwable) {
//         super(detailMessage, throwable);
//     }
// 
//     public JsonParsingException(final Throwable throwable) {
//         super(throwable);
//     }
// }
// 
// Path: placesautocomplete/src/main/java/com/seatgeek/placesautocomplete/json/PlacesApiJsonParser.java
// public interface PlacesApiJsonParser {
//     PlacesAutocompleteResponse autocompleteFromStream(InputStream is) throws JsonParsingException;
// 
//     PlacesDetailsResponse detailsFromStream(InputStream is) throws JsonParsingException;
// 
//     List<Place> readHistoryJson(InputStream in) throws JsonParsingException;
// 
//     void writeHistoryJson(OutputStream os, List<Place> places) throws JsonWritingException;
// }
// 
// Path: placesautocomplete/src/main/java/com/seatgeek/placesautocomplete/model/PlacesApiResponse.java
// public class PlacesApiResponse {
// 
//     /**
//      * API response status. Can and should be used to see if a request was successful
//      */
//     public final Status status;
// 
//     /**
//      * If !status.isSuccessful(), should return an en error message about what went wrong
//      */
//     public final String error_message;
// 
//     public PlacesApiResponse(final Status status, final String error_message) {
//         this.status = status;
//         this.error_message = error_message;
//     }
// }
// 
// Path: placesautocomplete/src/main/java/com/seatgeek/placesautocomplete/model/PlacesAutocompleteResponse.java
// public final class PlacesAutocompleteResponse extends PlacesApiResponse {
// 
//     /**
//      * A list of predicted places from the api based on the given input
//      */
//     public final List<Place> predictions;
// 
//     public PlacesAutocompleteResponse(final Status status, final String error_message, final List<Place> predictions) {
//         super(status, error_message);
//         this.predictions = predictions;
//     }
// }
// 
// Path: placesautocomplete/src/main/java/com/seatgeek/placesautocomplete/model/PlacesDetailsResponse.java
// public final class PlacesDetailsResponse extends PlacesApiResponse {
// 
//     public final PlaceDetails result;
// 
//     public PlacesDetailsResponse(final Status status, final String error_message, final PlaceDetails result) {
//         super(status, error_message);
//         this.result = result;
//     }
// }


// Path: placesautocomplete/src/main/java/com/seatgeek/placesautocomplete/network/AbstractPlacesHttpClient.java
import android.net.Uri;
import com.seatgeek.placesautocomplete.json.JsonParsingException;
import com.seatgeek.placesautocomplete.json.PlacesApiJsonParser;
import com.seatgeek.placesautocomplete.model.PlacesApiResponse;
import com.seatgeek.placesautocomplete.model.PlacesAutocompleteResponse;
import com.seatgeek.placesautocomplete.model.PlacesDetailsResponse;
import java.io.IOException;
import java.io.InputStream;

package com.seatgeek.placesautocomplete.network;




abstract class AbstractPlacesHttpClient implements PlacesHttpClient {

    protected final PlacesApiJsonParser placesApiJsonParser;

    protected AbstractPlacesHttpClient(PlacesApiJsonParser parser) {
        placesApiJsonParser = parser;
    }

    @Override
    public PlacesAutocompleteResponse executeAutocompleteRequest(final Uri uri) throws IOException {