#pragma once #include #include #include #include "MessageIssue.h" struct LspMessage; struct NotificationInMessage; struct lsBaseOutMessage; struct RequestInMessage; using GenericResponseHandler = std::function)>; using GenericRequestHandler = std::function)>; using GenericNotificationHandler = std::function)>; class Endpoint { public: virtual ~Endpoint() = default; virtual bool onRequest(std::unique_ptr) = 0; virtual bool notify(std::unique_ptr) = 0; virtual bool onResponse(std::string const&, std::unique_ptr) = 0; virtual void registerRequestHandler(std::string const&, GenericResponseHandler) = 0; virtual void registerNotifyHandler(std::string const&, GenericNotificationHandler) = 0; }; class GenericEndpoint : public Endpoint { public: GenericEndpoint(lsp::Log& l) : log(l) { } bool notify(std::unique_ptr) override; bool onResponse(std::string const&, std::unique_ptr) override; bool onRequest(std::unique_ptr) override; std::map method2request; std::map method2response; std::map method2notification; void registerRequestHandler(std::string const& method, GenericResponseHandler cb) override { method2request[method] = cb; } void registerNotifyHandler(std::string const& method, GenericNotificationHandler cb) override { method2notification[method] = cb; } lsp::Log& log; };