class StreamingHttpPayloadHolder implements PayloadInfo {

    Publisher<Object> payloadBodyAndTrailers() {
        if (payloadInfo.mayHaveTrailers()) {
            assert payloadBody != null;
            // If trailers are not yet split, the original Publisher will still have them.
            return trailersSingle == null ? rawPayload() : rawPayload().concat(trailersSingle);
        }
        if (isTransferEncodingChunked(headers)) {
            // explicitly added chunked encoding, we should add trailers explicitly.
            return payloadBody == null ? from(headersFactory.newEmptyTrailers()) :
                    rawPayload().concat(succeeded(headersFactory.newEmptyTrailers()));
        }
        return emptyOrRawPayload();
    }

      StreamingHttpPayloadHolder(final HttpHeaders headers, final BufferAllocator allocator,
                               @Nullable final Publisher<?> payloadBody, final DefaultPayloadInfo payloadInfo,
                               final HttpHeadersFactory headersFactory, final HttpProtocolVersion version);

}