private void maybeSetDefaultExchangeType() {
        if (delegate instanceof BlockingWebClientRequestPreparation) {
            // ExchangeType.UNARY is specified as the default type
            return;
        }

        final WebClientRequestPreparation webClientPreparation = (WebClientRequestPreparation) delegate;
        if (webClientPreparation.exchangeType() == null) {
            final boolean requestStreaming = webClientPreparation.isRequestStreaming();
            final boolean responseStreaming = !responseAs.requiresAggregation();
            exchangeType(ExchangeType.of(requestStreaming, responseStreaming));
        }
    }
Prepares and executes a new {@link HttpRequest} for a {@link WebClient} or {@link BlockingWebClient}, and
transforms an {@link HttpResponse} into the {@code T} type object.
core/src/main/java/com/linecorp/armeria/client/TransformingRequestPreparation.java