Expand description
Opaque #[repr(C)] wrapper for #[repr(Rust)] types that can be passed by value over FFI
IMPORTANT Only types requiring 8 Byte alignment or less can be wrapped, and the C environment must align uint64_t to at least 8 Byte boundaries.
use repr_c_wrapper::*;
#[repr(C)]
pub struct OpaqueWrapper(repr_c_wrapper_t!(String));
#[no_mangle]
pub extern "C" fn some_func() -> OpaqueWrapper {
OpaqueWrapper("hello".to_string().into())
}Acknowledgment Thanks to @QuineDot, @H2CO3, and @bruecki for identifying unsound practices in earlier drafts of this crate.
Macros§
- repr_
c_ wrapper_ t - A
ReprCWrappertype that corresponds to a wrapped version ofT
Structs§
- ReprC
Wrapper - Wraps a type in an opaque
#[repr(C)]wrapper with a size equal to the originalT