Merge pull request #37 from freeart/master
added serialize/deserialize methods to set custom startMessageId in createReader
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 @@
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 @@
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 @@
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();