Crates.io | repr_c_wrapper |
lib.rs | repr_c_wrapper |
version | 0.1.1 |
source | src |
created_at | 2023-07-10 22:14:39.319312 |
updated_at | 2023-07-11 03:01:37.958359 |
description | Opaque `#[repr(C)]` wrapper that can be passed by value over FFI |
homepage | |
repository | https://github.com/luketpeterson/repr_c_wrapper |
max_upload_size | |
id | 913329 |
size | 7,650 |
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.