#pragma once

#include "LibLsp/JsonRpc/RequestInMessage.h"
#include "LibLsp/JsonRpc/lsResponseMessage.h"

#include <LibLsp/lsp/lsCodeAction.h>

#include "LibLsp/lsp/CodeActionParams.h"

struct LspVariableBinding
{
    std::string bindingKey;
    std::string name;
    std::string type;
    bool isField;
    void swap(LspVariableBinding& arg) noexcept
    {
        bindingKey.swap(arg.bindingKey);
        name.swap(arg.name);
        type.swap(arg.type);
        std::swap(isField, arg.isField);
    }
};
MAKE_REFLECT_STRUCT(LspVariableBinding, bindingKey, name, type, isField)

struct CheckHashCodeEqualsResponse
{
    std::string type;
    std::vector<LspVariableBinding> fields;
    std::vector<std::string> existingMethods;
    MAKE_SWAP_METHOD(CheckHashCodeEqualsResponse, type, fields, type, existingMethods)
};
MAKE_REFLECT_STRUCT(CheckHashCodeEqualsResponse, type, fields, type, existingMethods)

DEFINE_REQUEST_RESPONSE_TYPE(
    java_checkHashCodeEqualsStatus, lsCodeActionParams, CheckHashCodeEqualsResponse, "java/checkHashCodeEqualsStatus"
)
