You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by ma...@apache.org on 2019/08/06 04:35:52 UTC

[pulsar-client-node] 37/45: added serialize/deserialize methods

This is an automated email from the ASF dual-hosted git repository.

massakam pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pulsar-client-node.git

commit 3e60959609c1b6ef72a35f8d98bb776148646fca
Author: Pavel Nekrasov <pa...@resultdevelopment.com>
AuthorDate: Tue Jul 16 14:02:54 2019 +0200

    added serialize/deserialize methods
---
 src/MessageId.cc | 31 ++++++++++++++++++++++++++++++-
 src/MessageId.h  |  2 ++
 2 files changed, 32 insertions(+), 1 deletion(-)

diff --git a/src/MessageId.cc b/src/MessageId.cc
index a0b520f..62cd1c8 100644
--- a/src/MessageId.cc
+++ b/src/MessageId.cc
@@ -31,7 +31,9 @@ Napi::Object MessageId::Init(Napi::Env env, Napi::Object exports) {
                                         StaticMethod("earliest", &MessageId::Earliest, napi_static),
                                         StaticMethod("latest", &MessageId::Latest, napi_static),
                                         StaticMethod("finalize", &MessageId::Finalize, napi_static),
-                                        InstanceMethod("toString", &MessageId::ToString),
+                                        InstanceMethod("serialize", &MessageId::Serialize),
+                                        StaticMethod("deserialize", &MessageId::Deserialize, napi_static),
+                                        InstanceMethod("toString", &MessageId::ToString)
                                     });
 
   constructor = Napi::Persistent(func);
@@ -78,6 +80,33 @@ Napi::Value MessageId::Latest(const Napi::CallbackInfo &info) {
   return obj;
 }
 
+Napi::Value MessageId::Serialize(const Napi::CallbackInfo &info) {
+  Napi::Env env = info.Env();
+
+  int len;
+  void *ptr = pulsar_message_id_serialize(GetCMessageId(), &len);
+
+  return Napi::Buffer<char>::New(env, (char *)ptr, len);
+}
+
+Napi::Value MessageId::Deserialize(const Napi::CallbackInfo &info) {
+  Napi::Env env = info.Env();
+
+  if (!info[0].IsBuffer()) {
+    Napi::Error::New(env, "Expected buffer as first argument").ThrowAsJavaScriptException();
+    return env.Undefined();
+  }
+
+  Napi::Object obj = NewInstance(info[0]);
+  MessageId *msgId = Unwrap(obj);
+
+  Napi::Buffer<char> buf = info[0].As<Napi::Buffer<char>>();
+  char *data = buf.Data();
+  msgId->cMessageId = (pulsar_message_id_t *)pulsar_message_id_deserialize(data, buf.Length());
+
+  return obj;
+}
+
 pulsar_message_id_t *MessageId::GetCMessageId() { return this->cMessageId; }
 
 Napi::Value MessageId::ToString(const Napi::CallbackInfo &info) {
diff --git a/src/MessageId.h b/src/MessageId.h
index 09c59e2..f65b1b4 100644
--- a/src/MessageId.h
+++ b/src/MessageId.h
@@ -31,6 +31,8 @@ class MessageId : public Napi::ObjectWrap<MessageId> {
   static Napi::Object NewInstanceFromMessage(const Napi::CallbackInfo &info, pulsar_message_t *cMessage);
   static Napi::Value Earliest(const Napi::CallbackInfo &info);
   static Napi::Value Latest(const Napi::CallbackInfo &info);
+  Napi::Value Serialize(const Napi::CallbackInfo &info);
+  static Napi::Value Deserialize(const Napi::CallbackInfo &info);
   static void Finalize(const Napi::CallbackInfo &info);
   MessageId(const Napi::CallbackInfo &info);
   ~MessageId();