Crate c8str

Source
Expand description

§c8str

This crate provides the C8Str and C8String types, which combine the properties of Rust native utf-8 strings and C style null terminated strings. These types guarantee that:

  • The string is valid utf-8
  • The string ends with a null terminator
  • The string doesn’t contain any null bytes before the end

Both types provide methods to get references to both &str (with or without the null terminator) and &CStr, or a pointer to *const c_char. They dereference to &str without the null terminator.

The c8 macro creates compile time constants of type &C8Str from string literals.

C8Str is no_std compatible. C8String is available behind the alloc feature.

assert_eq!(c8!("hello").as_str(), "hello");
assert_eq!(c8!("hello").as_c_str(), CStr::from_bytes_with_nul(b"hello\0").unwrap());
// assert_eq!(c8!("hello").as_c_str(), c"hello")); // from rust 1.77

§Features

  • alloc - Enable the C8String type. This requires the standard alloc or std crates.
  • std - Implement the Error trait from std for this crate’s error types. Implies alloc.

§Version history

  • 0.1.1 - show documentation for all features on docs.rs
  • 0.1.0 - first release

Macros§

c8
Makes a new C8Str constant from a string literal. This macro adds the null terminator for you and checks validity at compile time.

Structs§

C8Str
C8Str is a string slice type combining the properties of str and CStr. Note that unlike CStr, this will always be a normal slice so that trivial conversion to both str and CStr are possible. The crate may add a thin pointer alternative to C8Str in a future version, but C8Str won’t change from being a slice.
C8StrError
Common error type for most of this crate
C8Stringalloc
C8String is a string type combining the properties of String and CString. It’s the owned version of C8Str.
NonZeroChar
A char that is guaranteed to be nonzero
NonZeroCharError
Error returned from TryFrom<char>::try_from for NonZeroChar if the char was zero

Traits§

StringTypealloc
Trait for standard utf-8 string types. Implemented for &str, String, Box<str> and Cow<'_, str>