14 unstable releases (3 breaking)
Uses new Rust 2024
| 0.4.7 | Jun 21, 2025 |
|---|---|
| 0.4.6 | Jun 21, 2025 |
| 0.4.5 | May 10, 2025 |
| 0.3.3 |
|
| 0.1.0 | Nov 30, 2024 |
#843 in Rust patterns
1,372 downloads per month
61KB
1.5K
SLoC
Tools for implementing and transcribing C APIs.
&CStr, CString and Box are not FFI safe.
#[deny(improper_ctypes_definitions)]
extern "C" fn bad(_: &CStr, _: Box<u8>) -> CString { todo!() }
&SeaStr, SeaString and SeaBox are FFI-safe equivalents.
#[deny(improper_ctypes_definitions)]
extern "C" fn good(_: &SeaStr, _: SeaBox<u8>) -> SeaString { todo!() }
All are pointer-wide, with a non-null niche filled by Option::None.
Option::None.assert_eq!(size_of::<SeaBox<u8>>(), size_of::<*mut u8>());
assert_eq!(size_of::<Option<SeaBox<u8>>>(), size_of::<*mut u8>());
assert_eq!(size_of::<SeaString>(), size_of::<*mut c_char>());
assert_eq!(size_of::<Option<SeaString>>(), size_of::<*mut c_char>());
[trait@TransmuteFrom] is the culmination of this crate,
for writing your own wrappers to C types.
See its documentation for more.
Dependencies
~125KB