Napi::Value Reader::NewInstance()

in src/Reader.cc [148:172]


Napi::Value Reader::NewInstance(const Napi::CallbackInfo &info, std::shared_ptr<pulsar_client_t> cClient) {
  auto deferred = ThreadSafeDeferred::New(info.Env());
  Napi::Object config = info[0].As<Napi::Object>();

  auto readerConfig = std::make_shared<ReaderConfig>(config, &ReaderListener);

  const std::string &topic = readerConfig->GetTopic();
  if (topic.empty()) {
    deferred->Reject(std::string("Topic is required and must be specified as a string when creating reader"));
    return deferred->Promise();
  }
  if (readerConfig->GetCStartMessageId().get() == nullptr) {
    deferred->Reject(std::string(
        "StartMessageId is required and must be specified as a MessageId object when creating reader"));
    return deferred->Promise();
  }

  auto ctx = new ReaderNewInstanceContext(deferred, cClient, readerConfig);

  pulsar_client_create_reader_async(cClient.get(), topic.c_str(), readerConfig->GetCStartMessageId().get(),
                                    readerConfig->GetCReaderConfig().get(),
                                    &ReaderNewInstanceContext::createReaderCallback, ctx);

  return deferred->Promise();
}