Skip to content

Commit

Permalink
feat: Implement getComplexCallback(): T)
Browse files Browse the repository at this point in the history
  • Loading branch information
mrousavy committed Jan 9, 2025
1 parent 29aaf75 commit 9f89ca7
Show file tree
Hide file tree
Showing 17 changed files with 73 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -219,6 +219,12 @@ class HybridTestObjectKotlin: HybridTestObjectSwiftKotlinSpec() {
}
}

override fun getComplexCallback(): (Double) -> Unit {
return { value
Log.i(TAG, "Callback called with $value.")
}
}

override fun getCar(): Car {
return Car(2018.0, "Lamborghini", "Huracán", 640.0, Powertrain.GAS, null, true)
}
Expand Down
6 changes: 6 additions & 0 deletions packages/react-native-nitro-image/cpp/HybridTestObjectCpp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -318,6 +318,12 @@ std::shared_ptr<Promise<std::shared_ptr<ArrayBuffer>>> HybridTestObjectCpp::call
});
}

std::function<void(double)> HybridTestObjectCpp::getComplexCallback() {
return [](double value) {
Logger::log(LogLevel::Info, TAG, "Callback called with %f", value);
};
}

std::shared_ptr<Promise<double>>
HybridTestObjectCpp::getValueFromJSCallbackAndWait(const std::function<std::shared_ptr<Promise<double>>()>& getValue) {
return Promise<double>::async([=]() -> double {
Expand Down
2 changes: 2 additions & 0 deletions packages/react-native-nitro-image/cpp/HybridTestObjectCpp.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,8 @@ class HybridTestObjectCpp : public HybridTestObjectCppSpec {
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;

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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,9 @@ class HybridTestObjectSwift : HybridTestObjectSwiftKotlinSpec {
}
}

func getComplexCallback() throws -> (Double) -> Void {
return { value in print("Callback called with \(value).") }
}

func bounceStrings(array: [String]) throws -> [String] {
return array
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ int initialize(JavaVM* vm) {
margelo::nitro::image::JHybridImageFactorySpec::registerNatives();
margelo::nitro::image::JHybridTestObjectSwiftKotlinSpec::registerNatives();
margelo::nitro::image::JFunc_void_double::registerNatives();
margelo::nitro::image::JFunc_void_double::registerNatives();
margelo::nitro::image::JFunc_void_std__vector_Powertrain_::registerNatives();
margelo::nitro::image::JFunc_void::registerNatives();
margelo::nitro::image::JFunc_void::registerNatives();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -585,6 +585,11 @@ namespace margelo::nitro::image {
return __promise;
}();
}
std::function<void(double /* value */)> JHybridTestObjectSwiftKotlinSpec::getComplexCallback() {
static const auto method = _javaPart->getClass()->getMethod<jni::local_ref<JFunc_void_double::javaobject>()>("getComplexCallback");
auto __result = method(_javaPart);
return __result->cthis()->getFunction();
}
std::shared_ptr<Promise<double>> JHybridTestObjectSwiftKotlinSpec::getValueFromJSCallbackAndWait(const std::function<std::shared_ptr<Promise<double>>()>& getValue) {
static const auto method = _javaPart->getClass()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<JFunc_std__shared_ptr_Promise_double__::javaobject> /* getValue */)>("getValueFromJSCallbackAndWait");
auto __result = method(_javaPart, JFunc_std__shared_ptr_Promise_double__::fromCpp(getValue));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,7 @@ namespace margelo::nitro::image {
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 /* value */)> getComplexCallback() override;
std::shared_ptr<Promise<double>> getValueFromJSCallbackAndWait(const std::function<std::shared_ptr<Promise<double>>()>& getValue) 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;
Car getCar() override;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -294,6 +294,17 @@ abstract class HybridTestObjectSwiftKotlinSpec: HybridObject() {
return __result
}

@DoNotStrip
@Keep
abstract fun getComplexCallback(): (value: Double) -> Unit

@DoNotStrip
@Keep
private fun getComplexCallback(): Func_void_double {
val __result = getComplexCallback()
return __result
}

@DoNotStrip
@Keep
abstract fun getValueFromJSCallbackAndWait(getValue: () -> Promise<Double>): Promise<Double>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -875,6 +875,15 @@ namespace margelo::nitro::image::bridge::swift {
return Result<std::shared_ptr<Promise<std::shared_ptr<ArrayBuffer>>>>::withError(error);
}

// pragma MARK: Result<std::function<void(double /* value */)>>
using Result_std__function_void_double____value______ = Result<std::function<void(double /* value */)>>;
inline Result_std__function_void_double____value______ create_Result_std__function_void_double____value______(const std::function<void(double /* value */)>& value) {
return Result<std::function<void(double /* value */)>>::withValue(value);
}
inline Result_std__function_void_double____value______ create_Result_std__function_void_double____value______(const std::exception_ptr& error) {
return Result<std::function<void(double /* value */)>>::withError(error);
}

// pragma MARK: Result<Car>
using Result_Car_ = Result<Car>;
inline Result_Car_ create_Result_Car_(const Car& value) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -417,6 +417,14 @@ namespace margelo::nitro::image {
auto __value = std::move(__result.value());
return __value;
}
inline std::function<void(double /* value */)> getComplexCallback() override {
auto __result = _swiftPart.getComplexCallback();
if (__result.hasError()) [[unlikely]] {
std::rethrow_exception(__result.error());
}
auto __value = std::move(__result.value());
return __value;
}
inline std::shared_ptr<Promise<double>> getValueFromJSCallbackAndWait(const std::function<std::shared_ptr<Promise<double>>()>& getValue) override {
auto __result = _swiftPart.getValueFromJSCallbackAndWait(getValue);
if (__result.hasError()) [[unlikely]] {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ public protocol HybridTestObjectSwiftKotlinSpec_protocol: AnyObject {
func callSumUpNTimes(callback: @escaping () -> Promise<Double>, n: Double) throws -> Promise<Double>
func callbackAsyncPromise(callback: @escaping () -> Promise<Promise<Double>>) throws -> Promise<Double>
func callbackAsyncPromiseBuffer(callback: @escaping () -> Promise<Promise<ArrayBufferHolder>>) throws -> Promise<ArrayBufferHolder>
func getComplexCallback() throws -> (_ value: Double) -> Void
func getValueFromJSCallbackAndWait(getValue: @escaping () -> Promise<Double>) throws -> Promise<Double>
func getValueFromJsCallback(callback: @escaping () -> Promise<String>, andThenCall: @escaping (_ valueFromJs: String) -> Void) throws -> Promise<Void>
func getCar() throws -> Car
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1026,6 +1026,21 @@ public class HybridTestObjectSwiftKotlinSpec_cxx {
}
}

@inline(__always)
public func getComplexCallback() -> bridge.Result_std__function_void_double____value______ {
do {
let __result = try self.__implementation.getComplexCallback()
let __resultCpp = { () -> bridge.Func_void_double in
let __closureWrapper = Func_void_double(__result)
return bridge.create_Func_void_double(__closureWrapper.toUnsafe())
}()
return bridge.create_Result_std__function_void_double____value______(__resultCpp)
} catch (let __error) {
let __exceptionPtr = __error.toCpp()
return bridge.create_Result_std__function_void_double____value______(__exceptionPtr)
}
}

@inline(__always)
public func getValueFromJSCallbackAndWait(getValue: bridge.Func_std__shared_ptr_Promise_double__) -> bridge.Result_std__shared_ptr_Promise_double___ {
do {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ namespace margelo::nitro::image {
prototype.registerHybridMethod("callSumUpNTimes", &HybridTestObjectCppSpec::callSumUpNTimes);
prototype.registerHybridMethod("callbackAsyncPromise", &HybridTestObjectCppSpec::callbackAsyncPromise);
prototype.registerHybridMethod("callbackAsyncPromiseBuffer", &HybridTestObjectCppSpec::callbackAsyncPromiseBuffer);
prototype.registerHybridMethod("getComplexCallback", &HybridTestObjectCppSpec::getComplexCallback);
prototype.registerHybridMethod("getValueFromJSCallbackAndWait", &HybridTestObjectCppSpec::getValueFromJSCallbackAndWait);
prototype.registerHybridMethod("getValueFromJsCallback", &HybridTestObjectCppSpec::getValueFromJsCallback);
prototype.registerHybridMethod("getCar", &HybridTestObjectCppSpec::getCar);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,7 @@ namespace margelo::nitro::image {
virtual std::shared_ptr<Promise<double>> callSumUpNTimes(const std::function<std::shared_ptr<Promise<double>>()>& callback, double n) = 0;
virtual std::shared_ptr<Promise<double>> callbackAsyncPromise(const std::function<std::shared_ptr<Promise<std::shared_ptr<Promise<double>>>>()>& callback) = 0;
virtual 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) = 0;
virtual std::function<void(double /* value */)> getComplexCallback() = 0;
virtual std::shared_ptr<Promise<double>> getValueFromJSCallbackAndWait(const std::function<std::shared_ptr<Promise<double>>()>& getValue) = 0;
virtual 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) = 0;
virtual Car getCar() = 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ namespace margelo::nitro::image {
prototype.registerHybridMethod("callSumUpNTimes", &HybridTestObjectSwiftKotlinSpec::callSumUpNTimes);
prototype.registerHybridMethod("callbackAsyncPromise", &HybridTestObjectSwiftKotlinSpec::callbackAsyncPromise);
prototype.registerHybridMethod("callbackAsyncPromiseBuffer", &HybridTestObjectSwiftKotlinSpec::callbackAsyncPromiseBuffer);
prototype.registerHybridMethod("getComplexCallback", &HybridTestObjectSwiftKotlinSpec::getComplexCallback);
prototype.registerHybridMethod("getValueFromJSCallbackAndWait", &HybridTestObjectSwiftKotlinSpec::getValueFromJSCallbackAndWait);
prototype.registerHybridMethod("getValueFromJsCallback", &HybridTestObjectSwiftKotlinSpec::getValueFromJsCallback);
prototype.registerHybridMethod("getCar", &HybridTestObjectSwiftKotlinSpec::getCar);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,7 @@ namespace margelo::nitro::image {
virtual std::shared_ptr<Promise<double>> callSumUpNTimes(const std::function<std::shared_ptr<Promise<double>>()>& callback, double n) = 0;
virtual std::shared_ptr<Promise<double>> callbackAsyncPromise(const std::function<std::shared_ptr<Promise<std::shared_ptr<Promise<double>>>>()>& callback) = 0;
virtual 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) = 0;
virtual std::function<void(double /* value */)> getComplexCallback() = 0;
virtual std::shared_ptr<Promise<double>> getValueFromJSCallbackAndWait(const std::function<std::shared_ptr<Promise<double>>()>& getValue) = 0;
virtual 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) = 0;
virtual Car getCar() = 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ interface SharedTestObjectProps {
callbackAsyncPromiseBuffer(
callback: () => Promise<ArrayBuffer>
): Promise<ArrayBuffer>
getComplexCallback(): (value: number) => void

// Callbacks that return values
getValueFromJSCallbackAndWait(getValue: () => number): Promise<number>
Expand Down

0 comments on commit 9f89ca7

Please sign in to comment.