When we bind a function, we have to write argument checking and type conversion every time per each function. The example below is one of them.
#include "napi.h"
double CAdd(double arg0, double arg1) { return arg0 + arg1; }
Napi::Value Add(const Napi::CallbackInfo& info) {
Napi::Env env = info.Env();
if (info.Length() < 2) {
Napi::TypeError::New(env, "Wrong number of arguments").ThrowAsJavaScriptException();
return env.Null();
}
if (!info[0].IsNumber() || !info[1].IsNumber()) {
Napi::TypeError::New(env, "Wrong arguments").ThrowAsJavaScriptException();
return env.Null();
}
double arg0 = info[0].As<Napi::Number>().DoubleValue();
double arg1 = info[1].As<Napi::Number>().DoubleValue();
Napi::Number num = Napi::Number::New(env, CAdd(arg0, arg1);
return num;
}
And I made some template functions not to write everytime like below.
#include "node_binding/typed_call.h"
double CAdd(double arg0, double arg1) { return arg0 + arg1; }
Napi::Value Add(const Napi::CallbackInfo& info) {
return node_binding::TypedCall(info, &CAdd);
}
These codes are here and if you think it is good, I want to PR! :)
When we bind a function, we have to write
argument checkingandtype conversionevery time per each function. The example below is one of them.And I made some template functions not to write everytime like below.
These codes are here and if you think it is good, I want to PR! :)