openapi-nexus 0.1.7

OpenAPI 3.x multi-language code generator
Documentation
// Code generated by openapi-nexus. DO NOT EDIT.
//
// Enum Representation API — 1.0.0
// This API demonstrates all 4 kinds of enum representation types: Externally Tagged, Internally Tagged, Adjacently Tagged, and Untagged

package com.example.sdk.runtime;

import java.io.IOException;
import java.util.Map;

import okhttp3.HttpUrl;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

public class ApiClient {
    private static final MediaType JSON = MediaType.get("application/json");

    private final String baseUrl;
    private final OkHttpClient client;
    private final Authenticator authenticator;
    private final Map<String, String> defaultHeaders;

    public ApiClient(String baseUrl) {
        this(baseUrl, new OkHttpClient(), null, Map.of());
    }

    public ApiClient(String baseUrl, OkHttpClient client, Authenticator authenticator, Map<String, String> defaultHeaders) {
        this.baseUrl = baseUrl;
        this.client = client;
        this.authenticator = authenticator;
        this.defaultHeaders = defaultHeaders;
    }

    public Request newRequest(String method, String path, Map<String, String> query, String body) {
        String url = baseUrl.replaceAll("/+$", "") + path;
        HttpUrl parsed = HttpUrl.parse(url);
        if (parsed == null) {
            throw new IllegalArgumentException("Invalid URL: " + url);
        }
        HttpUrl.Builder urlBuilder = parsed.newBuilder();
        if (query != null) {
            for (Map.Entry<String, String> entry : query.entrySet()) {
                urlBuilder.addQueryParameter(entry.getKey(), entry.getValue());
            }
        }

        RequestBody requestBody = null;
        if (body != null) {
            requestBody = RequestBody.create(body, JSON);
        }

        Request.Builder builder = new Request.Builder()
                .url(urlBuilder.build())
                .method(method, requestBody);

        for (Map.Entry<String, String> entry : defaultHeaders.entrySet()) {
            builder.header(entry.getKey(), entry.getValue());
        }
        if (authenticator != null) {
            authenticator.authenticate(builder);
        }

        return builder.build();
    }

    public Response execute(Request request) throws IOException {
        return client.newCall(request).execute();
    }
}