Nan::NAN_METHOD_RETURN_TYPE TxnWrap::getCommon(Nan::NAN_METHOD_ARGS_TYPE info, Handle<Value> (*successFunc)(MDB_val&)) { Nan::HandleScope scope; TxnWrap *tw = Nan::ObjectWrap::Unwrap<TxnWrap>(info.This()); DbiWrap *dw = Nan::ObjectWrap::Unwrap<DbiWrap>(info[0]->ToObject()); if (!tw->txn) { return Nan::ThrowError("The transaction is already closed."); } MDB_val key, data; void (*freeKey)(MDB_val&) = argToKey(info[1], key, dw->keyIsUint32); if (!freeKey) { return; } int rc = mdb_get(tw->txn, dw->dbi, &key, &data); freeKey(key); if (rc == MDB_NOTFOUND) { return info.GetReturnValue().Set(Nan::Null()); } else if (rc != 0) { return Nan::ThrowError(mdb_strerror(rc)); } else { return info.GetReturnValue().Set(successFunc(data)); } }
Nan::NAN_METHOD_RETURN_TYPE Token::OpenSession(Nan::NAN_METHOD_ARGS_TYPE info) { Token* obj = ObjectWrap::Unwrap<Token>(info.This()); std::shared_ptr<IKeyVEILSession> sessionPtr = obj->handle()->openSession(); v8::Local<v8::Function> cons = Nan::New(Session::constructor()); v8::Local<v8::Object> sessObj = Nan::NewInstance(cons).ToLocalChecked(); Session* sess = ObjectWrap::Unwrap<Session>(sessObj); sess->handle(sessionPtr); info.GetReturnValue().Set(sessObj); }