diff options
author | Norbert Preining <norbert@preining.info> | 2021-12-28 03:01:00 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2021-12-28 03:01:00 +0000 |
commit | ecdf859b6ce481abfd530425dcf6f0f764bd0001 (patch) | |
tree | 13bc161dc046876ac6c92fce5f9f5034ba9aa573 /graphics/asymptote/LspCpp/LibLsp/JsonRpc/MessageJsonHandler.h | |
parent | 790995b7e79697514364450bf9c04f1b8d500838 (diff) |
CTAN sync 202112280300
Diffstat (limited to 'graphics/asymptote/LspCpp/LibLsp/JsonRpc/MessageJsonHandler.h')
-rw-r--r-- | graphics/asymptote/LspCpp/LibLsp/JsonRpc/MessageJsonHandler.h | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/graphics/asymptote/LspCpp/LibLsp/JsonRpc/MessageJsonHandler.h b/graphics/asymptote/LspCpp/LibLsp/JsonRpc/MessageJsonHandler.h new file mode 100644 index 0000000000..7e238b0cf6 --- /dev/null +++ b/graphics/asymptote/LspCpp/LibLsp/JsonRpc/MessageJsonHandler.h @@ -0,0 +1,61 @@ +#pragma once +#include <string> +#include <map> +#include <functional> +#include <LibLsp/JsonRpc/message.h> +class Reader; + + +using GenericRequestJsonHandler = std::function< std::unique_ptr<LspMessage>(Reader&) >; +using GenericResponseJsonHandler = std::function< std::unique_ptr<LspMessage>(Reader&) >; +using GenericNotificationJsonHandler = std::function< std::unique_ptr<LspMessage>(Reader&) >; + +class MessageJsonHandler +{ +public: + std::map< std::string, GenericRequestJsonHandler > method2request; + std::map< std::string, GenericResponseJsonHandler > method2response; + std::map< std::string, GenericNotificationJsonHandler > method2notification; + + + const GenericRequestJsonHandler* GetRequestJsonHandler(const char* methodInfo) const + { + const auto findIt = method2request.find(methodInfo); + return findIt == method2request.end() ? nullptr : &findIt->second; + } + + void SetRequestJsonHandler(const std::string& methodInfo, GenericRequestJsonHandler handler) + { + method2request[methodInfo] = handler; + } + + const GenericResponseJsonHandler* GetResponseJsonHandler(const char* methodInfo) const + { + const auto findIt = method2response.find(methodInfo); + return findIt == method2response.end() ? nullptr : &findIt->second; + } + + void SetResponseJsonHandler(const std::string& methodInfo,GenericResponseJsonHandler handler) + { + method2response[methodInfo] = handler; + } + + const GenericNotificationJsonHandler* GetNotificationJsonHandler(const char* methodInfo) const + { + const auto findIt = method2notification.find(methodInfo); + return findIt == method2notification.end() ? nullptr : &findIt->second; + } + + void SetNotificationJsonHandler(const std::string& methodInfo, GenericNotificationJsonHandler handler) + { + method2notification[methodInfo] = handler; + } + + + + std::unique_ptr<LspMessage> parseResponseMessage(const std::string&, Reader&); + std::unique_ptr<LspMessage> parseRequstMessage(const std::string&, Reader&); + bool resovleResponseMessage(Reader&, std::pair<std::string, std::unique_ptr<LspMessage>>& result); + std::unique_ptr<LspMessage> parseNotificationMessage(const std::string&, Reader&); +}; + |