in source/class_binder.c [36:110]
static napi_status s_argument_parse(
napi_env env,
napi_value value,
napi_valuetype expected_type,
bool accept_undefined,
struct aws_napi_argument *out_value) {
out_value->node = value;
AWS_NAPI_CALL(env, napi_typeof(env, value, &out_value->type), { return status; });
if (expected_type != napi_undefined && out_value->type != expected_type &&
!(accept_undefined && out_value->type == napi_undefined)) {
switch (expected_type) {
case napi_string:
napi_throw_type_error(env, NULL, "Class binder argument expected a string");
return napi_string_expected;
case napi_number:
napi_throw_type_error(env, NULL, "Class binder argument expected a number");
return napi_number_expected;
default:
napi_throw_type_error(env, NULL, "Class binder argument wrong type");
return napi_generic_failure;
}
}
switch (out_value->type) {
case napi_boolean: {
AWS_NAPI_CALL(env, napi_get_value_bool(env, value, &out_value->native.boolean), { return status; });
break;
}
case napi_string: {
AWS_NAPI_CALL(env, aws_byte_buf_init_from_napi(&out_value->native.string, env, value), { return status; });
break;
}
case napi_number: {
AWS_NAPI_CALL(env, napi_get_value_int64(env, value, &out_value->native.number), {
napi_throw_type_error(env, NULL, "Class binder argument expected a number");
return status;
});
break;
}
case napi_external: {
AWS_NAPI_CALL(env, napi_get_value_external(env, value, &out_value->native.external), {
napi_throw_type_error(env, NULL, "Class binder argument expected an external");
return status;
});
break;
}
case napi_object: {
/* Attempt to unwrap the object, just in case */
napi_status result = napi_unwrap(env, value, &out_value->native.external);
if (result != napi_ok) {
out_value->native.external = NULL;
}
break;
}
default:
/* Don't process, just leave as node value */
break;
}
return napi_ok;
}