/** * Copyright (c) 2015-present, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ #import "RCTCxxModule.h" #import #import #import #import #import "RCTCxxMethod.h" using namespace facebook::react; @implementation RCTCxxModule { std::unique_ptr _module; } + (NSString *)moduleName { return @""; } + (BOOL)requiresMainQueueSetup { return NO; } - (void)lazyInit { if (!_module) { _module = [self createModule]; if (_module) { RCTAssert([RCTBridgeModuleNameForClass([self class]) isEqualToString:@(_module->getName().c_str())], @"CxxModule class name %@ does not match runtime name %s", RCTBridgeModuleNameForClass([self class]), _module->getName().c_str()); } } } - (std::unique_ptr)createModule { RCTAssert(NO, @"Subclass %@ must override createModule", [self class]); return nullptr; } - (NSArray> *)methodsToExport; { [self lazyInit]; if (!_module) { return nil; } NSMutableArray *moduleMethods = [NSMutableArray new]; for (const auto &method : _module->getMethods()) { [moduleMethods addObject:[[RCTCxxMethod alloc] initWithCxxMethod:method]]; } return moduleMethods; } - (NSDictionary *)constantsToExport; { [self lazyInit]; if (!_module) { return nil; } NSMutableDictionary *moduleConstants = [NSMutableDictionary new]; for (const auto &c : _module->getConstants()) { moduleConstants[@(c.first.c_str())] = convertFollyDynamicToId(c.second); } return moduleConstants; } @end