From 859fd09d0742ff6aabf147f3c1a6c291ac9283e2 Mon Sep 17 00:00:00 2001 From: Colin Marc Date: Mon, 27 Jan 2025 14:47:04 +0100 Subject: [PATCH] Add Sendable to all async return types in tests Fixes #311. --- .../Result.swift | 30 ++++++++++++------- .../src/async_function.rs | 9 ++++-- 2 files changed, 26 insertions(+), 13 deletions(-) diff --git a/SwiftRustIntegrationTestRunner/SwiftRustIntegrationTestRunner/Result.swift b/SwiftRustIntegrationTestRunner/SwiftRustIntegrationTestRunner/Result.swift index 3549fb6f..48dfad49 100644 --- a/SwiftRustIntegrationTestRunner/SwiftRustIntegrationTestRunner/Result.swift +++ b/SwiftRustIntegrationTestRunner/SwiftRustIntegrationTestRunner/Result.swift @@ -6,23 +6,29 @@ // func swift_func_takes_callback_with_result_arg( - arg: (RustResult) -> () + arg: (RustResult) -> Void ) { - arg(.Ok(CallbackTestOpaqueRustType(555))) + arg(.Ok(CallbackTestOpaqueRustType(555))) } public class ResultTestOpaqueSwiftType { - var num: UInt32 - - init(val: UInt32) { - self.num = val - } - - func val() -> UInt32 { - self.num - } + var num: UInt32 + + init(val: UInt32) { + self.num = val + } + + func val() -> UInt32 { + self.num + } } +// TODO: we can delete these type assertions once we correctly generate Sendable +// types. See the following issue: +// https://github.com/chinedufn/swift-bridge/issues/150 + +extension AsyncRustFnReturnStruct: @unchecked Sendable {} + extension ResultTestOpaqueRustType: @unchecked Sendable {} extension ResultTestOpaqueRustType: Error {} @@ -41,5 +47,7 @@ extension ResultTransparentStruct: Error {} extension SameEnum: @unchecked Sendable {} extension SameEnum: Error {} +extension AsyncResultOkEnum: @unchecked Sendable {} + extension AsyncResultErrEnum: @unchecked Sendable {} extension AsyncResultErrEnum: Error {} diff --git a/crates/swift-integration-tests/src/async_function.rs b/crates/swift-integration-tests/src/async_function.rs index d70a778b..a922d8ed 100644 --- a/crates/swift-integration-tests/src/async_function.rs +++ b/crates/swift-integration-tests/src/async_function.rs @@ -13,7 +13,7 @@ mod ffi { extern "Rust" { async fn rust_async_return_null(); async fn rust_async_reflect_u8(arg: u8) -> u8; - async fn rust_async_reflect_string(string: String) -> String; + async fn rust_async_return_struct() -> AsyncRustFnReturnStruct; async fn rust_async_func_reflect_result_opaque_rust( arg: Result, @@ -21,6 +21,11 @@ mod ffi { async fn rust_async_func_return_result_null_opaque_rust( succeed: bool, ) -> Result<(), AsyncResultOpaqueRustType2>; + + // TODO: this is broken because RustString is not Sendable. + // Work around making String and other opaque types Sendable is tracked + // here: https://github.com/chinedufn/swift-bridge/issues/150 + // async fn rust_async_reflect_string(string: String) -> String; } extern "Rust" { @@ -49,7 +54,7 @@ mod ffi { enum AsyncResultOkEnum { NoFields, - UnnamedFields(i32, String), + UnnamedFields(i32, u32), NamedFields { value: u8 }, }