content: /*
   * Selling Partner API for Listings Items
   * The Selling Partner API for Listings Items (Listings Items API) provides programmatic access to selling partner listings on Amazon. Use this API in collaboration with the Selling Partner API for Product Type Definitions, which you use to retrieve the information about Amazon product types needed to use the Listings Items API.  For more information, see the [Listings Items API Use Case Guide](doc:listings-items-api-v2021-08-01-use-case-guide).
   *
   * OpenAPI spec version: 2021-08-01
   * 
   *
   * NOTE: This class is auto generated by the swagger code generator program.
   * https://github.com/swagger-api/swagger-codegen.git
   * Do not edit the class manually.
   */
  
  
  package io.swagger.client;
  
  import com.squareup.okhttp.*;
  import okio.Buffer;
  import okio.BufferedSink;
  import okio.GzipSink;
  import okio.Okio;
  
  import java.io.IOException;
  
  /**
   * Encodes request bodies using gzip.
   *
   * Taken from https://github.com/square/okhttp/issues/350
   */
  class GzipRequestInterceptor implements Interceptor {
      @Override public Response intercept(Chain chain) throws IOException {
          Request originalRequest = chain.request();
          if (originalRequest.body() == null || originalRequest.header("Content-Encoding") != null) {
              return chain.proceed(originalRequest);
          }
  
          Request compressedRequest = originalRequest.newBuilder()
                                                     .header("Content-Encoding", "gzip")
                                                     .method(originalRequest.method(), forceContentLength(gzip(originalRequest.body())))
                                                     .build();
          return chain.proceed(compressedRequest);
      }
  
      private RequestBody forceContentLength(final RequestBody requestBody) throws IOException {
          final Buffer buffer = new Buffer();
          requestBody.writeTo(buffer);
          return new RequestBody() {
              @Override
              public MediaType contentType() {
                  return requestBody.contentType();
              }
  
              @Override
              public long contentLength() {
                  return buffer.size();
              }
  
              @Override
              public void writeTo(BufferedSink sink) throws IOException {
                  sink.write(buffer.snapshot());
              }
          };
      }
  
      private RequestBody gzip(final RequestBody body) {
          return new RequestBody() {
              @Override public MediaType contentType() {
                  return body.contentType();
              }
  
              @Override public long contentLength() {
                  return -1; // We don't know the compressed length in advance!
              }
  
              @Override public void writeTo(BufferedSink sink) throws IOException {
                  BufferedSink gzipSink = Okio.buffer(new GzipSink(sink));
                  body.writeTo(gzipSink);
                  gzipSink.close();
              }
          };
      }
  }