Skip to content

Commit

Permalink
Add integration test for unused code in results
Browse files Browse the repository at this point in the history
  • Loading branch information
sax committed Jun 19, 2024
1 parent 58a06ab commit cc562e4
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -378,6 +378,7 @@ impl BuiltInResult {
custom_rust_ffi_types.push(quote! {
#[repr(C)]
pub enum #ty {
#[allow(unused)]
Ok #ok,
#[allow(unused)]
Err(#err),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -411,6 +411,7 @@ mod extern_rust_fn_return_result_opaque_rust_type_and_transparent_enum_type {
ExpectedRustTokens::Contains(quote! {
#[repr(C)]
pub enum ResultSomeOkTypeAndSomeErrEnum{
#[allow(unused)]
Ok(*mut super::SomeOkType),
#[allow(unused)]
Err(__swift_bridge__SomeErrEnum),
Expand Down Expand Up @@ -489,6 +490,7 @@ mod extern_rust_fn_return_result_transparent_enum_type_and_opaque_rust_type {
ExpectedRustTokens::Contains(quote! {
#[repr(C)]
pub enum ResultSomeOkEnumAndSomeErrType{
#[allow(unused)]
Ok(__swift_bridge__SomeOkEnum),
#[allow(unused)]
Err(*mut super::SomeErrType),
Expand Down Expand Up @@ -564,6 +566,7 @@ mod extern_rust_fn_return_result_unit_type_and_transparent_enum_type {
ExpectedRustTokens::Contains(quote! {
#[repr(C)]
pub enum ResultVoidAndSomeErrEnum{
#[allow(unused)]
Ok,
#[allow(unused)]
Err(__swift_bridge__SomeErrEnum),
Expand Down Expand Up @@ -636,6 +639,7 @@ mod extern_rust_fn_return_result_tuple_type_and_transparent_enum_type {
quote! {
#[repr(C)]
pub enum ResultTupleI32U32AndSomeErrEnum{
#[allow(unused)]
Ok(__swift_bridge__tuple_I32U32),
#[allow(unused)]
Err(__swift_bridge__SomeErrEnum),
Expand Down
37 changes: 33 additions & 4 deletions crates/swift-integration-tests/src/result.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,4 @@
//! See also: crates/swift-bridge-ir/src/codegen/codegen_tests/result_codegen_tests.rs
// This is a temporary workaround until https://github.com/chinedufn/swift-bridge/issues/270
// is closed. When tests are compiled they have `-D warnings` (deny warnings) enabled, so
// tests won't even compile unless this warning is ignored.
#![allow(dead_code)]
#[swift_bridge::bridge]
mod ffi {
Expand Down Expand Up @@ -41,6 +37,15 @@ mod ffi {
fn val(&self) -> u32;
}

#[swift_bridge(swift_repr = "struct")]
struct ResultTestTransparentStruct(pub String);

extern "Rust" {
fn rust_func_returns_result_null_transparent_struct(
succeed: bool,
) -> Result<(), ResultTestTransparentStruct>;
}

enum ResultTransparentEnum {
NamedField { data: i32 },
UnnamedFields(u8, String),
Expand Down Expand Up @@ -141,6 +146,30 @@ fn rust_func_return_result_unit_struct_opaque_rust(
}
}

fn rust_func_returns_result_null_transparent_struct(
succeed: bool,
) -> Result<(), ffi::ResultTestTransparentStruct> {
if succeed {
Ok(())
} else {
Err(ffi::ResultTestTransparentStruct("failed".to_string()))
}
}

impl std::error::Error for ffi::ResultTestTransparentStruct {}

impl std::fmt::Debug for ffi::ResultTestTransparentStruct {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", self)
}
}

impl std::fmt::Display for ffi::ResultTestTransparentStruct {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", self.0)
}
}

pub struct ResultTestOpaqueRustType {
val: u32,
}
Expand Down

0 comments on commit cc562e4

Please sign in to comment.