content: /*
   * Selling Partner API for Fulfillment By Amazon (FBA) Inbound v2024.
   * The Selling Partner API for FBA Inbound API enables building inbound workflows to create, manage, and send shipments into Amazon's fulfillment network.
   *
   * OpenAPI spec version: 2024-03-20
   *
   *
   * 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.MediaType;
  import com.squareup.okhttp.RequestBody;
  
  import java.io.IOException;
  
  import okio.Buffer;
  import okio.BufferedSink;
  import okio.ForwardingSink;
  import okio.Okio;
  import okio.Sink;
  
  public class ProgressRequestBody extends RequestBody {
  
      public interface ProgressRequestListener {
          void onRequestProgress(long bytesWritten, long contentLength, boolean done);
      }
  
      private final RequestBody requestBody;
  
      private final ProgressRequestListener progressListener;
  
      public ProgressRequestBody(RequestBody requestBody, ProgressRequestListener progressListener) {
          this.requestBody = requestBody;
          this.progressListener = progressListener;
      }
  
      @Override
      public MediaType contentType() {
          return requestBody.contentType();
      }
  
      @Override
      public long contentLength() throws IOException {
          return requestBody.contentLength();
      }
  
      @Override
      public void writeTo(BufferedSink sink) throws IOException {
          BufferedSink bufferedSink = Okio.buffer(sink(sink));
          requestBody.writeTo(bufferedSink);
          bufferedSink.flush();
      }
  
      private Sink sink(Sink sink) {
          return new ForwardingSink(sink) {
  
              long bytesWritten = 0L;
              long contentLength = 0L;
  
              @Override
              public void write(Buffer source, long byteCount) throws IOException {
                  super.write(source, byteCount);
                  if (contentLength == 0) {
                      contentLength = contentLength();
                  }
  
                  bytesWritten += byteCount;
                  progressListener.onRequestProgress(bytesWritten, contentLength, bytesWritten == contentLength);
              }
          };
      }
  }
  