@UnstableApi
    static HttpRequest of(RequestHeaders headers,
                          Publisher<? extends HttpData> publisher,
                          HttpHeaders trailers) {
        requireNonNull(headers, "headers");
        requireNonNull(publisher, "publisher");
        requireNonNull(trailers, "trailers");
        if (trailers.isEmpty()) {
            return of(headers, publisher);
        }
        return of(headers, SurroundingPublisher.of(null, publisher, trailers));
    }
Creates a new instance from an existing {@link RequestHeaders}, {@link Publisher} and trailers.

<p>Note that the {@link HttpData}s in the {@link Publisher} are not released when
{@link Subscription#cancel()} or {@link #abort()} is called. You should add a hook in order to
release the elements. See {@link PublisherBasedStreamMessage} for more information.
core/src/main/java/com/linecorp/armeria/common/HttpRequest.java