summaryrefslogtreecommitdiff
path: root/Build/source/utils/asymptote/LspCpp/src/jsonrpc/MessageJsonHandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/utils/asymptote/LspCpp/src/jsonrpc/MessageJsonHandler.cpp')
-rwxr-xr-xBuild/source/utils/asymptote/LspCpp/src/jsonrpc/MessageJsonHandler.cpp57
1 files changed, 57 insertions, 0 deletions
diff --git a/Build/source/utils/asymptote/LspCpp/src/jsonrpc/MessageJsonHandler.cpp b/Build/source/utils/asymptote/LspCpp/src/jsonrpc/MessageJsonHandler.cpp
new file mode 100755
index 00000000000..4f79312a0c3
--- /dev/null
+++ b/Build/source/utils/asymptote/LspCpp/src/jsonrpc/MessageJsonHandler.cpp
@@ -0,0 +1,57 @@
+#include "LibLsp/JsonRpc/MessageJsonHandler.h"
+#include <string>
+#include <rapidjson/document.h>
+
+
+
+std::unique_ptr<LspMessage> MessageJsonHandler::parseResponseMessage(const std::string& method, Reader& r)
+{
+ auto findIt = method2response.find(method);
+
+ if( findIt != method2response.end())
+ {
+ return findIt->second(r);
+ }
+ return nullptr;
+}
+
+std::unique_ptr<LspMessage> MessageJsonHandler::parseRequstMessage(const std::string& method, Reader&r)
+{
+ auto findIt = method2request.find(method);
+
+ if (findIt != method2request.end())
+ {
+ return findIt->second(r);
+ }
+ return nullptr;
+}
+
+bool MessageJsonHandler::resovleResponseMessage(Reader&r, std::pair<std::string, std::unique_ptr<LspMessage>>& result)
+{
+ for (auto& handler : method2response)
+ {
+ try
+ {
+ auto msg = handler.second(r);
+ result.first = handler.first;
+ result.second = std::move(msg);
+ return true;
+ }
+ catch (...)
+ {
+
+ }
+ }
+ return false;
+}
+
+std::unique_ptr<LspMessage> MessageJsonHandler::parseNotificationMessage(const std::string& method, Reader& r)
+{
+ auto findIt = method2notification.find(method);
+
+ if (findIt != method2notification.end())
+ {
+ return findIt->second(r);
+ }
+ return nullptr;
+}