mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
react-native code-gen > Add a C++ only TurboModule example (for Android/iOS/macOS/Windows) (#35138)
Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/35138 Changelog: [General][Added] - Add a C++ only TurboModule example (for Android/iOS/macOS/Windows) react-native@0.69 introduced a new bridging layer to ease integration for pure C++ TurboModules using C++ std:: types directly instead of the lower level jsi:: types: https://github.com/facebook/react-native/tree/v0.69.0/ReactCommon/react/bridging This bridging layer can be used in JSI functions or more conveniently in C++ TurboModules. Here is a example of an C++ only TurboModule which will work on Android and iOS and macOS/Windows (using microsoft/react-native-macos|windows) only using flow/TypeScript and standard C++ types. C++ only TurboModules are very handy as they do not require to work with JSI APIs - instead std:: or custom C++ can by used. Reviewed By: javache Differential Revision: D39011736 fbshipit-source-id: 84c833d8540671fde8505f1aeb0265074b248730
This commit is contained in:
committed by
Facebook GitHub Bot
parent
bbb3a6146c
commit
d07575b1c6
@@ -0,0 +1,64 @@
|
||||
/**
|
||||
* 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.
|
||||
*
|
||||
* @flow strict-local
|
||||
* @format
|
||||
*/
|
||||
|
||||
import type {TurboModule} from 'react-native/Libraries/TurboModule/RCTExport';
|
||||
|
||||
import {TurboModuleRegistry} from 'react-native';
|
||||
|
||||
/** FIXME: Enable flow-enum support
|
||||
export enum EnumInt {
|
||||
A = 23,
|
||||
B = 42,
|
||||
}
|
||||
*/
|
||||
|
||||
export type UnionFloat = 1.44 | 2.88 | 5.76;
|
||||
export type UnionString = 'One' | 'Two' | 'Three';
|
||||
export type UnionObject = {value: number} | {low: string};
|
||||
|
||||
export type ConstantsStruct = {|
|
||||
const1: boolean,
|
||||
const2: number,
|
||||
const3: string,
|
||||
|};
|
||||
|
||||
export type ObjectStruct = {|
|
||||
a: number,
|
||||
b: string,
|
||||
c?: ?string,
|
||||
|};
|
||||
|
||||
export type ValueStruct = {|
|
||||
x: number,
|
||||
y: string,
|
||||
z: ObjectStruct,
|
||||
|};
|
||||
|
||||
export interface Spec extends TurboModule {
|
||||
+getArray: (arg: Array<ObjectStruct | null>) => Array<ObjectStruct | null>;
|
||||
+getBool: (arg: boolean) => boolean;
|
||||
+getConstants: () => ConstantsStruct;
|
||||
// FIXME: Enable flow-enum support
|
||||
+getEnum: (arg: number /*EnumInt*/) => number /*EnumInt*/;
|
||||
+getMap: (arg: {[key: string]: ?number}) => {[key: string]: ?number};
|
||||
+getNumber: (arg: number) => number;
|
||||
+getObject: (arg: ObjectStruct) => ObjectStruct;
|
||||
+getSet: (arg: Array<number>) => Array<number>;
|
||||
+getString: (arg: string) => string;
|
||||
+getUnion: (x: UnionFloat, y: UnionString, z: UnionObject) => string;
|
||||
+getValue: (x: number, y: string, z: ObjectStruct) => ValueStruct;
|
||||
+getValueWithCallback: (callback: (value: string) => void) => void;
|
||||
+getValueWithPromise: (error: boolean) => Promise<string>;
|
||||
+voidFunc: () => void;
|
||||
}
|
||||
|
||||
export default (TurboModuleRegistry.get<Spec>(
|
||||
'NativeCxxModuleExampleCxx',
|
||||
): ?Spec);
|
||||
Reference in New Issue
Block a user