/* * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ #include "NativeCxxModuleExample.h" namespace facebook::react { NativeCxxModuleExample::NativeCxxModuleExample( std::shared_ptr jsInvoker) : NativeCxxModuleExampleCxxSpec(std::move(jsInvoker)) {} void NativeCxxModuleExample::getValueWithCallback( jsi::Runtime &rt, AsyncCallback callback) { callback({"value from callback!"}); } std::vector> NativeCxxModuleExample::getArray( jsi::Runtime &rt, std::vector> arg) { return arg; } bool NativeCxxModuleExample::getBool(jsi::Runtime &rt, bool arg) { return arg; } ConstantsStruct NativeCxxModuleExample::getConstants(jsi::Runtime &rt) { return ConstantsStruct{true, 69, "react-native"}; } CustomEnumInt NativeCxxModuleExample::getCustomEnum( jsi::Runtime &rt, CustomEnumInt arg) { return arg; } NativeCxxModuleExampleCxxEnumFloat NativeCxxModuleExample::getNumEnum( jsi::Runtime &rt, NativeCxxModuleExampleCxxEnumInt arg) { return NativeCxxModuleExampleCxxEnumFloat::FB; } NativeCxxModuleExampleCxxEnumStr NativeCxxModuleExample::getStrEnum( jsi::Runtime &rt, NativeCxxModuleExampleCxxEnumNone arg) { return NativeCxxModuleExampleCxxEnumStr::SB; } std::map> NativeCxxModuleExample::getMap( jsi::Runtime &rt, std::map> arg) { return arg; } double NativeCxxModuleExample::getNumber(jsi::Runtime &rt, double arg) { return arg; } ObjectStruct NativeCxxModuleExample::getObject( jsi::Runtime &rt, ObjectStruct arg) { return arg; } std::set NativeCxxModuleExample::getSet( jsi::Runtime &rt, std::set arg) { return arg; } std::string NativeCxxModuleExample::getString( jsi::Runtime &rt, std::string arg) { return arg; } std::string NativeCxxModuleExample::getUnion( jsi::Runtime &rt, float x, std::string y, jsi::Object z) { std::string result = "x: " + std::to_string(x) + ", y: " + y + ", z: { "; if (z.hasProperty(rt, "value")) { result += "value: "; result += std::to_string(z.getProperty(rt, "value").getNumber()); } else if (z.hasProperty(rt, "low")) { result += "low: "; result += z.getProperty(rt, "low").getString(rt).utf8(rt); } result += " }"; return result; } ValueStruct NativeCxxModuleExample::getValue( jsi::Runtime &rt, double x, std::string y, ObjectStruct z) { ValueStruct result{x, y, z}; return result; } AsyncPromise NativeCxxModuleExample::getValueWithPromise( jsi::Runtime &rt, bool error) { auto promise = AsyncPromise(rt, jsInvoker_); if (error) { promise.reject("intentional promise rejection"); } else { promise.resolve("result!"); } return promise; } void NativeCxxModuleExample::voidFunc(jsi::Runtime &rt) { // Nothing to do } void NativeCxxModuleExample::emitCustomDeviceEvent( jsi::Runtime &rt, jsi::String eventName) { // Test emitting device events (RCTDeviceEventEmitter.emit) from C++ // TurboModule with arbitrary arguments emitDeviceEvent( rt, eventName.utf8(rt).c_str(), [](jsi::Runtime &rt, std::vector &args) { args.emplace_back(jsi::Value(true)); args.emplace_back(jsi::Value(42)); args.emplace_back(jsi::String::createFromAscii(rt, "stringArg")); }); } } // namespace facebook::react