JsonRpcResponse.java

/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *--------------------------------------------------------------------------------------------*/

package com.github.copilot.sdk.json;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;

/**
 * JSON-RPC 2.0 response structure.
 * <p>
 * This is an internal class representing the wire format of a JSON-RPC
 * response. It follows the JSON-RPC 2.0 specification. A response contains
 * either a result or an error, but not both.
 *
 * @see JsonRpcRequest
 * @see JsonRpcError
 * @see <a href="https://www.jsonrpc.org/specification">JSON-RPC 2.0
 *      Specification</a>
 * @since 1.0.0
 */
@JsonInclude(JsonInclude.Include.NON_NULL)
public final class JsonRpcResponse {

    @JsonProperty("jsonrpc")
    private String jsonrpc;

    @JsonProperty("id")
    private Object id;

    @JsonProperty("result")
    private Object result;

    @JsonProperty("error")
    private JsonRpcError error;

    /**
     * Gets the JSON-RPC version.
     *
     * @return the version string (should be "2.0")
     */
    public String getJsonrpc() {
        return jsonrpc;
    }

    /**
     * Sets the JSON-RPC version.
     *
     * @param jsonrpc
     *            the version string
     */
    public void setJsonrpc(String jsonrpc) {
        this.jsonrpc = jsonrpc;
    }

    /**
     * Gets the response ID.
     *
     * @return the request identifier this response corresponds to
     */
    public Object getId() {
        return id;
    }

    /**
     * Sets the response ID.
     *
     * @param id
     *            the response identifier
     */
    public void setId(Object id) {
        this.id = id;
    }

    /**
     * Gets the result of the RPC call.
     *
     * @return the result object, or {@code null} if there was an error
     */
    public Object getResult() {
        return result;
    }

    /**
     * Sets the result of the RPC call.
     *
     * @param result
     *            the result object
     */
    public void setResult(Object result) {
        this.result = result;
    }

    /**
     * Gets the error if the RPC call failed.
     *
     * @return the error object, or {@code null} if successful
     */
    public JsonRpcError getError() {
        return error;
    }

    /**
     * Sets the error for a failed RPC call.
     *
     * @param error
     *            the error object
     */
    public void setError(JsonRpcError error) {
        this.error = error;
    }
}