#include <jni.h>
#include <jsi/jsi.h>
#include <ReactCommon/CallInvokerHolder.h>
#include "mopro-ffi.h"
namespace jsi = facebook::jsi;
namespace react = facebook::react;
extern "C"
JNIEXPORT jboolean JNICALL
Java_com_moproffi_MoproFfiModule_nativeInstallRustCrate(
JNIEnv *env,
jclass type,
jlong rtPtr,
jobject callInvokerHolderJavaObj
) {
using JCallInvokerHolder = facebook::react::CallInvokerHolder;
auto holderLocal = facebook::jni::make_local(callInvokerHolderJavaObj);
auto holderRef = facebook::jni::static_ref_cast<JCallInvokerHolder::javaobject>(holderLocal);
auto* holderCxx = holderRef->cthis();
auto jsCallInvoker = holderCxx->getCallInvoker();
auto runtime = reinterpret_cast<jsi::Runtime *>(rtPtr);
return moproffi::installRustCrate(*runtime, jsCallInvoker);
}
extern "C"
JNIEXPORT jboolean JNICALL
Java_com_moproffi_MoproFfiModule_nativeCleanupRustCrate(JNIEnv *env, jclass type, jlong rtPtr) {
auto runtime = reinterpret_cast<jsi::Runtime *>(rtPtr);
return moproffi::cleanupRustCrate(*runtime);
}