std::function<void(folly::dynamic)> makeCallback( std::weak_ptr<Instance> instance, const folly::dynamic& callbackId) { if (!callbackId.isInt()) { throw std::invalid_argument("Expected callback(s) as final argument"); } auto id = callbackId.getInt(); return [winstance = std::move(instance), id](folly::dynamic args) { if (auto instance = winstance.lock()) { instance->callJSCallback(id, std::move(args)); } }; }
int64_t convertDynamicIfIntegral(const folly::dynamic& val) { if (val.isInt()) { return val.getInt(); } double dbl = val.getDouble(); int64_t result = static_cast<int64_t>(dbl); if (dbl != result) { throwNewJavaException( exceptions::gUnexpectedNativeTypeExceptionClass, "Tried to read an int, but got a non-integral double: %f", dbl); } return result; }