-
-
Notifications
You must be signed in to change notification settings - Fork 117
Expand file tree
/
Copy pathHybridTestObjectCpp.hpp
More file actions
276 lines (252 loc) 路 17.4 KB
/
Copy pathHybridTestObjectCpp.hpp
File metadata and controls
276 lines (252 loc) 路 17.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
//
// HybridTestObjectCpp.hpp
// NitroTest
//
// Created by Marc Rousavy on 30.07.24.
//
#pragma once
#include "HybridTestObjectCppSpec.hpp"
#include <jsi/jsi.h>
namespace margelo::nitro::test {
using namespace facebook;
using ComplexVariant = std::variant<std::shared_ptr<ArrayBuffer>, std::function<void(double /* value */)>, WrappedJsStruct,
std::shared_ptr<Promise<double>>, std::chrono::system_clock::time_point, std::shared_ptr<AnyMap>>;
using StringOrExternal = std::variant<std::shared_ptr<margelo::nitro::test::external::HybridSomeExternalObjectSpec>, std::string>;
class HybridTestObjectCpp : public HybridTestObjectCppSpec {
public:
HybridTestObjectCpp() : HybridObject(TAG) {}
protected:
size_t getExternalMemorySize() noexcept override;
private:
double _number;
bool _bool;
std::string _string;
int64_t _int64Value;
uint64_t _uint64Value;
NullType _null = nitro::null;
std::optional<std::string> _optionalString;
std::variant<nitro::NullType, std::string> _nullableString;
std::variant<double, std::string> _variant;
std::tuple<double, std::string> _tuple;
std::optional<std::vector<std::string>> _optionalArray;
std::optional<std::shared_ptr<HybridTestObjectCppSpec>> _optionalHybrid;
std::optional<Powertrain> _optionalEnum;
std::optional<OldEnum> _optionalOldEnum;
std::optional<TruckPowertrain> _optionalEnumPlusOne;
std::optional<std::function<void(double)>> _optionalCallback;
bool _hasBooleanWritable;
bool _isBooleanWritable;
std::shared_ptr<Promise<double>> _pendingPromise;
bool _isolatedBoolean = false;
std::string _isTextValue;
private:
static inline uint64_t calculateFibonacci(int count) noexcept {
if (count <= 0) [[unlikely]]
return 0;
if (count == 1) [[unlikely]]
return 1;
return calculateFibonacci(count - 1) + calculateFibonacci(count - 2);
}
public:
// Properties
double getNumberValue() override;
void setNumberValue(double numberValue) override;
bool getBoolValue() override;
void setBoolValue(bool boolValue) override;
std::string getStringValue() override;
void setStringValue(const std::string& stringValue) override;
int64_t getInt64Value() override;
void setInt64Value(int64_t int64Value) override;
uint64_t getUint64Value() override;
void setUint64Value(uint64_t uint64Value) override;
NullType getNullValue() override;
void setNullValue(NullType value) override;
std::optional<std::string> getOptionalString() override;
void setOptionalString(const std::optional<std::string>& optionalString) override;
std::optional<std::string> getStringOrUndefined() override;
void setStringOrUndefined(const std::optional<std::string>& stringOrUndefined) override;
std::variant<nitro::NullType, std::string> getStringOrNull() override;
void setStringOrNull(const std::variant<nitro::NullType, std::string>& stringOrNull) override;
std::optional<std::vector<std::string>> getOptionalArray() override;
void setOptionalArray(const std::optional<std::vector<std::string>>& optionalArray) override;
std::variant<double, std::string> getSomeVariant() override;
void setSomeVariant(const std::variant<double, std::string>& variant) override;
std::variant<std::string, Car> passNamedVariant(const std::variant<std::string, Car>& variant) override;
std::variant<std::shared_ptr<HybridBaseSpec>, OptionalWrapper>
passAllEmptyObjectVariant(const std::variant<std::shared_ptr<HybridBaseSpec>, OptionalWrapper>& variant) override;
ComplexVariant bounceComplexVariant(const ComplexVariant& variant) override;
std::tuple<double, std::string> getSomeTuple() override;
void setSomeTuple(const std::tuple<double, std::string>& tuple) override;
std::shared_ptr<HybridTestObjectCppSpec> getThisObject() override;
std::optional<std::shared_ptr<HybridTestObjectCppSpec>> getOptionalHybrid() override;
void setOptionalHybrid(const std::optional<std::shared_ptr<HybridTestObjectCppSpec>>& optionalHybrid) override;
std::optional<Powertrain> getOptionalEnum() override;
void setOptionalEnum(std::optional<Powertrain> optionalEnum) override;
std::optional<OldEnum> getOptionalOldEnum() override;
void setOptionalOldEnum(std::optional<OldEnum> optionalOldEnum) override;
std::optional<TruckPowertrain> getOptionalEnumPlusOne() override;
void setOptionalEnumPlusOne(std::optional<TruckPowertrain> optionalEnumPlusOne) override;
std::optional<std::function<void(double)>> getOptionalCallback() override;
void setOptionalCallback(const std::optional<std::function<void(double)>>& callback) override;
bool getHasBoolean() override;
bool getIsBoolean() override;
bool getIsBooleanWritable() override;
void setIsBooleanWritable(bool isBooleanWritable) override;
bool getHasBooleanWritable() override;
void setHasBooleanWritable(bool hasBooleanWritable) override;
bool getIsolatedBoolean() override;
void setIsolatedBoolean(bool isolatedBoolean) override;
std::string getIsTextValue() override;
void setIsTextValue(const std::string& isTextValue) override;
public:
// Methods
double addNumbers(double a, double b) override;
std::string addStrings(const std::string& a, const std::string& b) override;
void simpleFunc() override;
std::shared_ptr<HybridObject> bounceAnyHybrid(const std::shared_ptr<HybridObject>& object) override;
CustomString bounceCustomType(CustomString value) override;
void multipleArguments(double num, const std::string& str, bool boo) override;
NullType bounceNull(NullType value) override;
std::shared_ptr<AnyMap> createMap() override;
std::shared_ptr<AnyMap> mapRoundtrip(const std::shared_ptr<AnyMap>& map) override;
std::vector<std::string> getMapKeys(const std::shared_ptr<AnyMap>& map) override;
std::shared_ptr<AnyMap> mergeMaps(const std::shared_ptr<AnyMap>& a, const std::shared_ptr<AnyMap>& b) override;
std::shared_ptr<AnyMap> copyAnyMap(const std::shared_ptr<AnyMap>& map) override;
double funcThatThrows() override;
std::shared_ptr<Promise<void>> funcThatThrowsBeforePromise() override;
void throwError(const std::exception_ptr& error) override;
std::string tryOptionalParams(double num, bool boo, const std::optional<std::string>& str) override;
std::string tryMiddleParam(double num, std::optional<bool> boo, const std::string& str) override;
std::optional<Powertrain> tryOptionalEnum(std::optional<Powertrain> value) override;
bool tryTrailingOptional(double num, const std::string& str, std::optional<bool> boo) override;
std::chrono::system_clock::time_point add1Hour(std::chrono::system_clock::time_point date) override;
std::chrono::system_clock::time_point currentDate() override;
std::variant<double, std::string>
passVariant(const std::variant<bool, std::vector<double>, std::vector<std::string>, double, std::string>& either) override;
std::vector<std::string> bounceStrings(const std::vector<std::string>& array) override;
std::vector<double> bounceNumbers(const std::vector<double>& array) override;
std::vector<Person> bounceStructs(const std::vector<Person>& array) override;
std::vector<std::vector<Person>> bounceNestedArray(const std::vector<std::vector<Person>>& array) override;
PartialPerson bouncePartialStruct(const PartialPerson& person) override;
std::string sumUpAllPassengers(const std::vector<Car>& cars) override;
std::vector<Powertrain> bounceEnums(const std::vector<Powertrain>& array) override;
void complexEnumCallback(const std::vector<Powertrain>& array,
const std::function<void(const std::vector<Powertrain>& /* array */)>& callback) override;
std::vector<std::shared_ptr<HybridChildSpec>> bounceHybridObjects(const std::vector<std::shared_ptr<HybridChildSpec>>& array) override;
std::vector<std::function<void()>> bounceFunctions(const std::vector<std::function<void()>>& functions) override;
std::vector<std::shared_ptr<AnyMap>> bounceMaps(const std::vector<std::shared_ptr<AnyMap>>& maps) override;
std::unordered_map<std::string, double> bounceSimpleMap(const std::unordered_map<std::string, double>& map) override;
std::unordered_map<std::string, std::optional<std::string>>
bounceOptionalMap(const std::unordered_map<std::string, std::optional<std::string>>& map) override;
std::unordered_map<std::string, std::variant<nitro::NullType, std::string>>
bounceNullMap(const std::unordered_map<std::string, std::variant<nitro::NullType, std::string>>& map) override;
std::unordered_map<std::string, std::optional<std::variant<nitro::NullType, std::string>>>
bounceOptionalNullMap(const std::unordered_map<std::string, std::optional<std::variant<nitro::NullType, std::string>>>& map) override;
std::vector<std::shared_ptr<Promise<double>>> bouncePromises(const std::vector<std::shared_ptr<Promise<double>>>& promises) override;
std::vector<std::shared_ptr<ArrayBuffer>> bounceArrayBuffers(const std::vector<std::shared_ptr<ArrayBuffer>>& arrayBuffers) override;
std::vector<std::optional<std::string>>
bounceOptionals(const std::vector<std::optional<std::string>>& strings,
const std::vector<std::optional<std::shared_ptr<ArrayBuffer>>>& arrayBuffers) override;
std::vector<std::variant<nitro::NullType, std::string>>
bounceNulls(const std::vector<std::variant<nitro::NullType, std::string>>& strings) override;
std::vector<std::optional<std::variant<nitro::NullType, std::string>>>
bounceOptionalNulls(const std::vector<std::optional<std::variant<nitro::NullType, std::string>>>& strings) override;
std::variant<OldEnum, bool> getVariantEnum(const std::variant<OldEnum, bool>& variant) override;
std::variant<Powertrain, Car> bounceVariantUnionEnum(const std::variant<Powertrain, Car>& variant) override;
std::variant<WeirdNumbersEnum, bool> getVariantWeirdNumbersEnum(const std::variant<WeirdNumbersEnum, bool>& variant) override;
std::variant<Person, Car> getVariantObjects(const std::variant<Person, Car>& variant) override;
std::variant<std::shared_ptr<HybridTestObjectCppSpec>, Person>
getVariantHybrid(const std::variant<std::shared_ptr<HybridTestObjectCppSpec>, Person>& variant) override;
std::variant<std::shared_ptr<HybridTestObjectCppSpec>, Powertrain>
getVariantHybridEnum(const std::variant<std::shared_ptr<HybridTestObjectCppSpec>, Powertrain>& variant) override;
std::variant<std::tuple<double, double>, std::tuple<double, double, double>>
getVariantTuple(const std::variant<std::tuple<double, double>, std::tuple<double, double, double>>& variant) override;
std::tuple<double, double, double> flip(const std::tuple<double, double, double>& tuple) override;
std::tuple<double, std::string, bool> passTuple(const std::tuple<double, std::string, bool>& tuple) override;
std::unordered_map<std::string, std::variant<bool, double>>
bounceMap(const std::unordered_map<std::string, std::variant<bool, double>>& map) override;
std::unordered_map<std::string, std::string> extractMap(const MapWrapper& mapWrapper) override;
int64_t calculateFibonacciSync(double value) override;
std::shared_ptr<Promise<int64_t>> calculateFibonacciAsync(double value) override;
std::shared_ptr<Promise<void>> wait(double seconds) override;
void callCallback(const std::function<void()>& callback) override;
std::shared_ptr<Promise<void>>
callCallbackThatReturnsPromiseVoid(const std::function<std::shared_ptr<Promise<std::shared_ptr<Promise<void>>>>()>& callback) override;
std::function<void(double)> createNativeCallback(const std::function<void(double /* num */)>& wrappingJsCallback) override;
void callWithOptional(std::optional<double> value, const std::function<void(std::optional<double> /* maybe */)>& callback) override;
std::shared_ptr<Promise<double>>
getValueFromJSCallbackAndWait(const std::function<std::shared_ptr<Promise<double>>()>& getValue) override;
void callAll(const std::function<void()>& first, const std::function<void()>& second, const std::function<void()>& third) override;
std::shared_ptr<Promise<double>> callSumUpNTimes(const std::function<std::shared_ptr<Promise<double>>()>& callback, double n) override;
std::shared_ptr<Promise<double>>
callbackAsyncPromise(const std::function<std::shared_ptr<Promise<std::shared_ptr<Promise<double>>>>()>& callback) override;
std::shared_ptr<Promise<std::shared_ptr<ArrayBuffer>>> callbackAsyncPromiseBuffer(
const std::function<std::shared_ptr<Promise<std::shared_ptr<Promise<std::shared_ptr<ArrayBuffer>>>>>()>& callback) override;
std::function<void(double)> getComplexCallback() override;
void twoOptionalCallbacks(double value, const std::optional<std::function<void(double /* value */)>>& first,
const std::optional<std::function<void(const std::string& /* value */)>>& second) override;
void errorCallback(const std::function<void(const std::exception_ptr& /* error */)>& onError) override;
std::shared_ptr<Promise<void>>
getValueFromJsCallback(const std::function<std::shared_ptr<Promise<std::string>>()>& callback,
const std::function<void(const std::string& /* valueFromJs */)>& andThenCall) override;
std::shared_ptr<Promise<double>> awaitAndGetPromise(const std::shared_ptr<Promise<double>>& promise) override;
std::shared_ptr<Promise<Car>> awaitAndGetComplexPromise(const std::shared_ptr<Promise<Car>>& promise) override;
std::shared_ptr<Promise<void>> awaitPromise(const std::shared_ptr<Promise<void>>& promise) override;
std::shared_ptr<Promise<void>> promiseThrows() override;
std::shared_ptr<Promise<double>> promiseReturnsInstantly() override;
std::shared_ptr<Promise<double>> promiseReturnsInstantlyAsync() override;
std::shared_ptr<Promise<double>> createPendingPromise() override;
void resolvePendingPromiseOnWorker() override;
std::shared_ptr<Promise<void>> promiseThatResolvesVoidInstantly() override;
std::shared_ptr<Promise<std::optional<double>>> promiseThatResolvesToUndefined() override;
std::shared_ptr<Promise<std::optional<double>>> awaitNullablePromise() override;
Car getCar() override;
bool isCarElectric(const Car& car) override;
bool areCarsEqual(const Car& a, const Car& b) override;
std::optional<Person> getDriver(const Car& car) override;
Car bounceCar(const Car& car) override;
void jsStyleObjectAsParameters(const JsStyleStruct& params) override;
WrappedJsStruct bounceWrappedJsStyleStruct(const WrappedJsStruct& value) override;
OptionalWrapper bounceOptionalWrapper(const OptionalWrapper& wrapper) override;
OptionalCallback bounceOptionalCallback(const OptionalCallback& value) override;
std::optional<OptionalEnumWrapper> bounceOptionalEnumStruct(const std::optional<OptionalEnumWrapper>& value) override;
std::shared_ptr<ArrayBuffer> createArrayBufferFromNativeBuffer(bool /* copy */) override;
std::shared_ptr<ArrayBuffer> createArrayBuffer() override;
std::shared_ptr<ArrayBuffer> copyBuffer(const std::shared_ptr<ArrayBuffer>& buffer) override;
std::shared_ptr<ArrayBuffer> bounceArrayBuffer(const std::shared_ptr<ArrayBuffer>& buffer) override;
double getBufferLastItem(const std::shared_ptr<ArrayBuffer>& buffer) override;
void setAllValuesTo(const std::shared_ptr<ArrayBuffer>& buffer, double value) override;
std::shared_ptr<Promise<std::shared_ptr<ArrayBuffer>>> createArrayBufferAsync() override;
std::shared_ptr<ArrayBuffer> createHardwareBuffer(double width, double height, double layers, HardwareBufferFormat format) override;
std::shared_ptr<HybridTestObjectCppSpec> newTestObject() override;
std::shared_ptr<Promise<std::shared_ptr<HybridTestObjectCppSpec>>> newTestObjectAsync() override;
std::shared_ptr<HybridBaseSpec> createBase() override;
std::shared_ptr<HybridChildSpec> createChild() override;
std::shared_ptr<HybridBaseSpec> createBaseActualChild() override;
std::shared_ptr<HybridChildSpec> bounceChild(const std::shared_ptr<HybridChildSpec>& child) override;
std::shared_ptr<HybridBaseSpec> bounceBase(const std::shared_ptr<HybridBaseSpec>& base) override;
std::shared_ptr<HybridBaseSpec> bounceChildBase(const std::shared_ptr<HybridChildSpec>& child) override;
std::shared_ptr<HybridChildSpec> castBase(const std::shared_ptr<HybridBaseSpec>& base) override;
bool getIsViewBlue(const std::shared_ptr<HybridTestViewSpec>& view) override;
double callbackSync(const std::function<double()>& callback) override;
std::function<double()> getSyncNumberCallback() override;
std::function<int64_t(int64_t)> bounceSyncInt64Callback(const std::function<int64_t(int64_t)>& callback) override;
std::shared_ptr<margelo::nitro::test::external::HybridSomeExternalObjectSpec>
bounceExternalHybrid(const std::shared_ptr<margelo::nitro::test::external::HybridSomeExternalObjectSpec>& externalObject) override;
std::shared_ptr<margelo::nitro::test::external::HybridSomeExternalObjectSpec> createInternalObject() override;
ExternalObjectStruct bounceExternalStruct(const ExternalObjectStruct& externalStruct) override;
StringOrExternal bounceExternalVariant(const StringOrExternal& variant) override;
std::shared_ptr<margelo::nitro::test::external::HybridSomeExternalObjectSpec> createExternalVariantFromFunc(
const std::function<std::shared_ptr<margelo::nitro::test::external::HybridSomeExternalObjectSpec>()>& factory) override;
// Raw JSI functions
jsi::Value rawJsiFunc(jsi::Runtime& runtime, const jsi::Value& thisValue, const jsi::Value* args, size_t count);
void dispose() override;
void loadHybridMethods() override {
// call base protoype
HybridTestObjectCppSpec::loadHybridMethods();
// register all methods we override here
registerHybrids(this,
[](Prototype& prototype) { prototype.registerRawHybridMethod("rawJsiFunc", 0, &HybridTestObjectCpp::rawJsiFunc); });
}
};
}; // namespace margelo::nitro::test