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 May 2, 2025
0.1.0 Nov 30, 2024

#1299 in Rust patterns

Download history 132/week @ 2025-04-02 6/week @ 2025-04-09 3/week @ 2025-04-16 844/week @ 2025-04-30 381/week @ 2025-05-07 74/week @ 2025-05-14 206/week @ 2025-06-18 23/week @ 2025-06-25

229 downloads per month

Apache-2.0 OR MIT

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.

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

~140KB