#pragma once #include "utils.h" #include "serializer.h" #include enum class IpcId : int { // Language server specific requests. CancelRequest = 0, Initialize, Initialized, TextDocumentDidOpen, TextDocumentDidChange, TextDocumentDidClose, TextDocumentDidSave, TextDocumentCompletion, TextDocumentDefinition, TextDocumentHover, TextDocumentReferences, TextDocumentDocumentSymbol, TextDocumentCodeLens, CodeLensResolve, WorkspaceSymbol, // Internal implementation detail. Quit, IsAlive, OpenProject, Cout }; MAKE_ENUM_HASHABLE(IpcId) MAKE_REFLECT_TYPE_PROXY(IpcId, int) const char* IpcIdToString(IpcId id); struct BaseIpcMessage { const IpcId method_id; BaseIpcMessage(IpcId method_id); }; template struct IpcMessage : public BaseIpcMessage { IpcMessage() : BaseIpcMessage(T::kIpcId) {} }; struct Ipc_Quit : public IpcMessage { static constexpr IpcId kIpcId = IpcId::Quit; }; MAKE_REFLECT_EMPTY_STRUCT(Ipc_Quit); struct Ipc_IsAlive : public IpcMessage { static constexpr IpcId kIpcId = IpcId::IsAlive; }; MAKE_REFLECT_EMPTY_STRUCT(Ipc_IsAlive); struct Ipc_OpenProject : public IpcMessage { static constexpr IpcId kIpcId = IpcId::OpenProject; std::string project_path; }; MAKE_REFLECT_STRUCT(Ipc_OpenProject, project_path); struct Ipc_Cout : public IpcMessage { static constexpr IpcId kIpcId = IpcId::Cout; std::string content; }; MAKE_REFLECT_STRUCT(Ipc_Cout, content);