Files
react-native/Libraries/TypeSafety/RCTTypedModuleConstants.h
T
Nick Gerleman 96027f787a Remove clang-format opt-out for Libraries
Summary:
D31464478 enabled clang-format by default across projects, but opted out directories with a lot of formatting errors. This removes the opt-out, so clang-format is run in that directory as well.

Changelog:
[Internal][Changed] - Remove clang-format opt-out for Libraries

Reviewed By: lunaleaps

Differential Revision: D40310275

fbshipit-source-id: abe154ab466798fbfa010364a3627f40ca18b179
2022-10-13 02:23:13 -07:00

50 lines
1.5 KiB
Objective-C

/*
* 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 <utility>
#import <Foundation/Foundation.h>
#import <React/RCTBridgeModule.h>
#import <React/RCTDefines.h>
/**
* Interop type layer for RN's exportedConstants and the C++ structs generated by our typesafety codegen.
*
* The NativeModuleSpec will define a constantsToExport method which you can implement as follows:
*
* - (nonnull ModuleConstants<JS::Constants>)constantsToExport
* {
* return typedConstants<JS::Constants>({ ... });
* }
*/
// Internal container for module constants. Do not use yourself directly, instead use the typedConstants helpers below.
@interface _RCTTypedModuleConstants<StructType> : NSDictionary <NSString *, id>
+ (instancetype)newWithUnsafeDictionary:(NSDictionary<NSString *, id> *)dictionary;
@end
namespace facebook {
namespace react {
// Objective-C doesn't allow arbitrary types in its lightweight generics, only object and block types. We can work
// around that by having the struct type we care about be a block-argument. The block never exists at runtime.
template <typename T>
using ModuleConstants = _RCTTypedModuleConstants<void (^)(T)> *;
template <typename T>
ModuleConstants<T> typedConstants(typename T::Builder::Input &&value)
{
typename T::Builder builder(std::move(value));
return [_RCTTypedModuleConstants newWithUnsafeDictionary:builder.buildUnsafeRawValue()];
}
}
}