class DefaultHttpExecutionStrategy implements HttpExecutionStrategy {

    @Override
    public <FS> Single<StreamingHttpResponse> invokeClient(
            final Executor fallback, Publisher<Object> flattenedRequest, @Nullable final FS flushStrategy,
            final ClientInvoker<FS> client) {
        final Executor e = executor(fallback);
        if (offloaded(OFFLOAD_SEND)) {
            flattenedRequest = flattenedRequest.subscribeOn(e);
        }
        Single<StreamingHttpResponse> resp = client.invokeClient(flattenedRequest, flushStrategy);
        if (offloaded(OFFLOAD_RECEIVE_META)) {
            resp = resp.publishOn(e);
        }
        if (offloaded(OFFLOAD_RECEIVE_DATA)) {
            resp = resp.map(response -> response.transformRawPayloadBody(payload -> payload.publishOn(e)));
        }
        return resp;
    }

      DefaultHttpExecutionStrategy(@Nullable final Executor executor, final byte offloads, final boolean threadAffinity,
                                 final MergeStrategy mergeStrategy);
      DefaultHttpExecutionStrategy(byte offloadOverride, HttpExecutionStrategy original);

}