class BodyHandlerAdapter implements BodyHandler<AsyncBody> {
    private final AsyncBodySubscriber<?> subscriber;
    private final BodyHandler<Void> handler;

    private BodyHandlerAdapter(AsyncBodySubscriber<?> subscriber, BodyHandler<Void> handler) {
      this.subscriber = subscriber;
      this.handler = handler;
    }

    @Override
    public BodySubscriber<AsyncBody> apply(ResponseInfo responseInfo) {<FILL_FUNCTION_BODY>}
  }

      BodySubscriber<Void> bodySubscriber = handler.apply(responseInfo);
      return new BodySubscriber<AsyncBody>() {
        CompletableFuture<AsyncBody> cf = CompletableFuture.completedFuture(subscriber);

        @Override
        public void onSubscribe(Subscription subscription) {
          bodySubscriber.onSubscribe(subscription);
        }

        @Override
        public void onNext(List<ByteBuffer> item) {
          // there doesn't seem to be a guarantee that the buffer won't be modified by the caller
          // after passing it in, so we'll create a copy
          bodySubscriber.onNext(item.stream().map(BufferUtil::copy).collect(Collectors.toList()));
        }

        @Override
        public void onError(Throwable throwable) {
          bodySubscriber.onError(throwable);
        }

        @Override
        public void onComplete() {
          bodySubscriber.onComplete();
        }

        @Override
        public CompletionStage<AsyncBody> getBody() {
          return cf;
        }
      };
    
<methods>public abstract CompletableFuture<io.fabric8.kubernetes.client.http.WebSocketResponse> buildWebSocketDirect(io.fabric8.kubernetes.client.http.StandardWebSocketBuilder, io.fabric8.kubernetes.client.http.WebSocket.Listener) ,public final void close() ,public CompletableFuture<HttpResponse<io.fabric8.kubernetes.client.http.AsyncBody>> consumeBytes(io.fabric8.kubernetes.client.http.HttpRequest, Consumer<List<java.nio.ByteBuffer>>) ,public abstract CompletableFuture<HttpResponse<io.fabric8.kubernetes.client.http.AsyncBody>> consumeBytesDirect(io.fabric8.kubernetes.client.http.StandardHttpRequest, Consumer<List<java.nio.ByteBuffer>>) ,public java.util.concurrent.atomic.AtomicBoolean getClosed() ,public V getTag(Class<V>) ,public boolean isClosed() ,public io.fabric8.kubernetes.client.http.HttpClient.DerivedClientBuilder newBuilder() ,public io.fabric8.kubernetes.client.http.HttpRequest.Builder newHttpRequestBuilder() ,public io.fabric8.kubernetes.client.http.WebSocket.Builder newWebSocketBuilder() ,public CompletableFuture<HttpResponse<V>> sendAsync(io.fabric8.kubernetes.client.http.HttpRequest, Class<V>) <variables>private static final Logger LOG,private static final long MAX_ADDITIONAL_REQUEST_TIMEOUT,protected StandardHttpClientBuilder<io.fabric8.kubernetes.client.jdkhttp.JdkHttpClientImpl,io.fabric8.kubernetes.client.jdkhttp.JdkHttpClientFactory,io.fabric8.kubernetes.client.jdkhttp.JdkHttpClientBuilderImpl> builder,protected java.util.concurrent.atomic.AtomicBoolean closed