// Path: core/src/main/java/com/jimmoores/quandl/processing/GenericRESTDataProvider.java
// public interface GenericRESTDataProvider<RAW_METADATA_TYPE, TABLE_TYPE> {
//   /**
//    * HTTP Response code returned in some cases, usually when a request is nonsensical, e.g. requesting a non-existent column.
//    */
//   int UNPROCESSABLE_ENTITY = 422;
//   /**
//    * HTTP Response code returned when the client has made too many request - it is an indication of rate limiting on the server-side.
//    */
//   int TOO_MANY_REQUESTS = 429; // response code returned in some cases
//   /**
//    * HTTP Response code returned when the service is unavailable - it is an indication of a probably temporary error or load problem on the
//    * server.
//    */
//   int SERVICE_UNAVAILABLE = 503;
// 
//   /**
//    * Invoke a GET call on the web target and return the result as a parsed JSON object. Throws a QuandlRuntimeException if there was a CSV
//    * parsing problem or response code was not OK
//    * 
//    * @param target  the WebTarget describing the call to make, not null
//    * @param request  the request object or null
//    * @return the parsed JSON object
//    */
//   RAW_METADATA_TYPE getJSONResponse(WebTarget target, Request request);
// 
//   /**
//    * Invoke a GET call on the web target and return the result as a TabularResult (parsed CSV). Throws a QuandlRuntimeException if there was
//    * a JSON parsing problem, network issue or response code was not OK
//    * 
//    * @param target  the WebTarget describing the call to make, not null
//    * @param request  the request object or null
//    * @return the parsed TabularResult
//    */
//   TABLE_TYPE getTabularResponse(WebTarget target, Request request);
// }
// 
// Path: core/src/main/java/com/jimmoores/quandl/processing/Request.java
// public interface Request {
//   /**
//    * Process this request using the provided processor.
//    * @param <T>  the type returned by the request processor
//    * @param processor  the request processor
//    * @return the result from the request processor
//    */
//   <T> T accept(RequestProcessor<T> processor);
// }


import javax.ws.rs.client.WebTarget;
import org.json.JSONObject;
import com.jimmoores.quandl.processing.GenericRESTDataProvider;
import com.jimmoores.quandl.processing.Request;
import tech.tablesaw.api.Table;
package com.jimmoores.quandl.processing.tablesaw;





public interface TableSawRESTDataProvider
    extends GenericRESTDataProvider<JSONObject, Table> {
  /**
   * Invoke a GET call on the web target and return the result as a parsed JSON object. Throws a QuandlUnprocessableEntityException if
   * Quandl returned a response code that indicates a nonsensical request Throws a QuandlTooManyRequestsException if Quandl returned a
   * response code indicating the client had made too many requests Throws a QuandlRuntimeException if there was a CSV parsing problem or
   * response code was unusual
   * 
   * @param target the WebTarget describing the call to make, not null
   * @param request the request object or null
   * @return the parsed JSON object
   */
  JSONObject getJSONResponse(WebTarget target, Request request);

  /**
   * Invoke a GET call on the web target and return the result as a TableSaw table. Throws a QuandlUnprocessableEntityException
   * if Quandl returned a response code that indicates a nonsensical request Throws a QuandlTooManyRequestsException if Quandl returned a
   * response code indicating the client had made too many requests Throws a QuandlRuntimeException if there was a JSON parsing problem,
   * network issue or response code was unusual
   * 
   * @param target the WebTarget describing the call to make, not null
   * @param request the request object or null
   * @return the resulting Table
   */
// Path: core/src/main/java/com/jimmoores/quandl/processing/GenericRESTDataProvider.java
// public interface GenericRESTDataProvider<RAW_METADATA_TYPE, TABLE_TYPE> {
//   /**
//    * HTTP Response code returned in some cases, usually when a request is nonsensical, e.g. requesting a non-existent column.
//    */
//   int UNPROCESSABLE_ENTITY = 422;
//   /**
//    * HTTP Response code returned when the client has made too many request - it is an indication of rate limiting on the server-side.
//    */
//   int TOO_MANY_REQUESTS = 429; // response code returned in some cases
//   /**
//    * HTTP Response code returned when the service is unavailable - it is an indication of a probably temporary error or load problem on the
//    * server.
//    */
//   int SERVICE_UNAVAILABLE = 503;
// 
//   /**
//    * Invoke a GET call on the web target and return the result as a parsed JSON object. Throws a QuandlRuntimeException if there was a CSV
//    * parsing problem or response code was not OK
//    * 
//    * @param target  the WebTarget describing the call to make, not null
//    * @param request  the request object or null
//    * @return the parsed JSON object
//    */
//   RAW_METADATA_TYPE getJSONResponse(WebTarget target, Request request);
// 
//   /**
//    * Invoke a GET call on the web target and return the result as a TabularResult (parsed CSV). Throws a QuandlRuntimeException if there was
//    * a JSON parsing problem, network issue or response code was not OK
//    * 
//    * @param target  the WebTarget describing the call to make, not null
//    * @param request  the request object or null
//    * @return the parsed TabularResult
//    */
//   TABLE_TYPE getTabularResponse(WebTarget target, Request request);
// }
// 
// Path: core/src/main/java/com/jimmoores/quandl/processing/Request.java
// public interface Request {
//   /**
//    * Process this request using the provided processor.
//    * @param <T>  the type returned by the request processor
//    * @param processor  the request processor
//    * @return the result from the request processor
//    */
//   <T> T accept(RequestProcessor<T> processor);
// }


// Path: tablesaw/src/main/java/com/jimmoores/quandl/processing/tablesaw/TableSawRESTDataProvider.java
import javax.ws.rs.client.WebTarget;
import org.json.JSONObject;
import com.jimmoores.quandl.processing.GenericRESTDataProvider;
import com.jimmoores.quandl.processing.Request;
import tech.tablesaw.api.Table;

package com.jimmoores.quandl.processing.tablesaw;





public interface TableSawRESTDataProvider
    extends GenericRESTDataProvider<JSONObject, Table> {
  /**
   * Invoke a GET call on the web target and return the result as a parsed JSON object. Throws a QuandlUnprocessableEntityException if
   * Quandl returned a response code that indicates a nonsensical request Throws a QuandlTooManyRequestsException if Quandl returned a
   * response code indicating the client had made too many requests Throws a QuandlRuntimeException if there was a CSV parsing problem or
   * response code was unusual
   * 
   * @param target the WebTarget describing the call to make, not null
   * @param request the request object or null
   * @return the parsed JSON object
   */
  JSONObject getJSONResponse(WebTarget target, Request request);

  /**
   * Invoke a GET call on the web target and return the result as a TableSaw table. Throws a QuandlUnprocessableEntityException
   * if Quandl returned a response code that indicates a nonsensical request Throws a QuandlTooManyRequestsException if Quandl returned a
   * response code indicating the client had made too many requests Throws a QuandlRuntimeException if there was a JSON parsing problem,
   * network issue or response code was unusual
   * 
   * @param target the WebTarget describing the call to make, not null
   * @param request the request object or null
   * @return the resulting Table
   */
  Table getTabularResponse(WebTarget target, Request request);