@Override
    public Object newClient(ClientBuilderParams params) {
        validateParams(params);

        final Class<?> clientType = params.clientType();
        validateClientType(clientType);

        final ClientOptions options = params.options();
        final HttpClient delegate = options.decoration().decorate(clientDelegate);

        if (clientType == HttpClient.class) {
            return delegate;
        }

        // XXX(ikhoon): Consider a common interface for HTTP clients?
        if (clientType == WebClient.class || clientType == BlockingWebClient.class ||
            clientType == RestClient.class) {
            final RedirectConfig redirectConfig = options.redirectConfig();
            final HttpClient delegate0;
            if (redirectConfig == RedirectConfig.disabled()) {
                delegate0 = delegate;
            } else {
                delegate0 = RedirectingClient.newDecorator(params, redirectConfig).apply(delegate);
            }
            final DefaultWebClient webClient = new DefaultWebClient(params, delegate0, meterRegistry);
            if (clientType == WebClient.class) {
                return webClient;
            } else if (clientType == BlockingWebClient.class) {
                return webClient.blocking();
            } else {
                return webClient.asRestClient();
            }
        } else {
            throw new IllegalArgumentException("unsupported client type: " + clientType.getName());
        }
    }
Returns a new {@link Bootstrap} for connecting to a {@link io.netty.channel.unix.DomainSocketAddress}.
The returned {@link Bootstrap} has its {@link ChannelFactory}, {@link AddressResolverGroup} and
socket options pre-configured.
core/src/main/java/com/linecorp/armeria/client/HttpClientFactory.java