Crates.io | seasick |
lib.rs | seasick |
version | 0.1.0 |
source | src |
created_at | 2024-11-30 01:52:05.311254 |
updated_at | 2024-11-30 01:52:05.311254 |
description | FFI-safe nul-terminated strings with ownership semantics |
homepage | https://crates.io/crates/seasick |
repository | https://github.com/aatifsyed/seasick |
max_upload_size | |
id | 1466224 |
size | 25,229 |
FFI-safe types for writing and transcribing C APIs.
&CStr
and CString
are not FFI safe.
#[deny(improper_ctypes)]
extern "C" {
fn concat(_: &CStr, _: &CStr) -> CString;
}
&SeaStr
and [SeaString
] are FFI-safe equivalents.
extern "C" {
fn concat(_: &SeaStr, _: &SeaStr) -> SeaString;
}
They use the non-null niche which is filled by [Option::None
].
/** may return null */
char *foo(void);
extern "C" fn foo() -> Option<SeaString> { .. }
assert_eq!(size_of::<Option<SeaString>>(), size_of::<*mut c_char>());
[SeaBox
] is an additional owned pointer type, with a pluggable [Allocator
].