#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"
)