summaryrefslogtreecommitdiff
path: root/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/RequestInMessage.h
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/RequestInMessage.h')
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/RequestInMessage.h70
1 files changed, 70 insertions, 0 deletions
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/RequestInMessage.h b/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/RequestInMessage.h
new file mode 100644
index 0000000000..163d038a2e
--- /dev/null
+++ b/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/RequestInMessage.h
@@ -0,0 +1,70 @@
+#pragma once
+
+
+#include "serializer.h"
+#include <atomic>
+#include <mutex>
+#include "lsRequestId.h"
+#include "LibLsp/JsonRpc/message.h"
+#include "LibLsp/lsp/method_type.h"
+#include "lsResponseMessage.h"
+
+struct RequestInMessage : public LspMessage {
+ // number or string, actually no null
+ lsRequestId id;
+ std::string method;
+ Kind GetKid() override
+ {
+ return REQUEST_MESSAGE;
+ }
+
+};
+
+
+
+template <class T, class TDerived >
+struct lsRequest : public RequestInMessage
+{
+ lsRequest(MethodType _method)
+ {
+ method = _method;
+ }
+ MethodType GetMethodType() const override { return method.c_str(); }
+ void SetMethodType(MethodType _method) override
+ {
+ method = _method;
+ } \
+ void ReflectWriter(Writer& writer) override {
+ Reflect(writer, static_cast<TDerived&>(*this));
+ }
+
+ static std::unique_ptr<LspMessage> ReflectReader(Reader& visitor) {
+
+ TDerived* temp = new TDerived();
+ std::unique_ptr<TDerived> message = std::unique_ptr<TDerived>(temp);
+ // Reflect may throw and *message will be partially deserialized.
+ Reflect(visitor, static_cast<TDerived&>(*temp));
+ return message;
+ }
+ void swap(lsRequest& arg) noexcept
+ {
+ id.swap(arg.id);
+ method.swap(method);
+ std::swap(params, arg.params);
+ }
+ T params;
+};
+
+
+#define DEFINE_REQUEST_RESPONSE_TYPE(MSG,request_param,response_result,methodInfo)\
+namespace MSG {\
+ struct response :public ResponseMessage< response_result, response> {}; \
+ struct request : public lsRequest< request_param , request >{\
+ static constexpr MethodType kMethodInfo = methodInfo;\
+ request():lsRequest(kMethodInfo){} \
+ using Response = response;\
+ };\
+};\
+MAKE_REFLECT_STRUCT(MSG::request, jsonrpc, id, method, params);\
+MAKE_REFLECT_STRUCT(MSG::response, jsonrpc, id, result);
+