Fix a folly::dynamic deprecated pattern

Reviewed By: javache

Differential Revision: D4075622

fbshipit-source-id: 4a6b6c4068d762dce2b1535bfd9630e185f5489f
This commit is contained in:
Giuseppe Ottaviano
2016-10-26 09:43:56 -07:00
committed by Facebook Github Bot
parent d8e77f0c76
commit dc02907039
3 changed files with 37 additions and 16 deletions
+26 -4
View File
@@ -3,6 +3,8 @@
#include "CxxNativeModule.h"
#include "Instance.h"
#include <iterator>
#include <folly/json.h>
#include <cxxreact/JsArgumentHelpers.h>
@@ -26,6 +28,24 @@ std::function<void(folly::dynamic)> makeCallback(
};
}
namespace {
/**
* CxxModule::Callback accepts a vector<dynamic>, makeCallback returns
* a callback that accepts a dynamic, adapt the second into the first.
* TODO: Callback types should be made equal (preferably
* function<void(dynamic)>) to avoid the extra copy and indirect call.
*/
CxxModule::Callback convertCallback(
std::function<void(folly::dynamic)> callback) {
return [callback = std::move(callback)](std::vector<folly::dynamic> args) {
callback(folly::dynamic(std::make_move_iterator(args.begin()),
std::make_move_iterator(args.end())));
};
}
}
CxxNativeModule::CxxNativeModule(std::weak_ptr<Instance> instance,
std::unique_ptr<CxxModule> module)
: instance_(instance)
@@ -86,10 +106,13 @@ void CxxNativeModule::invoke(ExecutorToken token, unsigned int reactMethodId, fo
}
if (method.callbacks == 1) {
first = makeCallback(instance_, token, params[params.size() - 1]);
first = convertCallback(
makeCallback(instance_, token, params[params.size() - 1]));
} else if (method.callbacks == 2) {
first = makeCallback(instance_, token, params[params.size() - 2]);
second = makeCallback(instance_, token, params[params.size() - 1]);
first = convertCallback(
makeCallback(instance_, token, params[params.size() - 2]));
second = convertCallback(
makeCallback(instance_, token, params[params.size() - 1]));
}
params.resize(params.size() - method.callbacks);
@@ -158,4 +181,3 @@ MethodCallResult CxxNativeModule::callSerializableNativeHook(
}
}