/* * 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. */ #pragma once #include #include #ifndef RN_EXPORT #define RN_EXPORT __attribute__((visibility("default"))) #endif namespace facebook { namespace react { class Instance; class MessageQueueThread; typedef void (*WarnOnUsageLogger)(std::string message); std::function makeCallback( std::weak_ptr instance, const folly::dynamic &callbackId); class RN_EXPORT CxxNativeModule : public NativeModule { public: CxxNativeModule( std::weak_ptr instance, std::string name, xplat::module::CxxModule::Provider provider, std::shared_ptr messageQueueThread) : instance_(instance), name_(std::move(name)), provider_(provider), messageQueueThread_(messageQueueThread) {} std::string getName() override; std::string getSyncMethodName(unsigned int methodId) override; std::vector getMethods() override; folly::dynamic getConstants() override; void invoke(unsigned int reactMethodId, folly::dynamic &¶ms, int callId) override; MethodCallResult callSerializableNativeHook( unsigned int hookId, folly::dynamic &&args) override; static void setShouldWarnOnUse(bool value); private: void lazyInit(); std::weak_ptr instance_; std::string name_; xplat::module::CxxModule::Provider provider_; std::shared_ptr messageQueueThread_; std::unique_ptr module_; std::vector methods_; void emitWarnIfWarnOnUsage( const std::string &method_name, const std::string &module_name); static bool shouldWarnOnUse_; }; } // namespace react } // namespace facebook