# 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.
The `c8string` macro creates a `C8String` verified at compile time, and the `c8format`
macro can format into `C8String`s.
The `WithC8Str` trait provides a convenience method for accessing an object as a `&C8Str`.
`C8Str` is `no_std` compatible. `C8String` is available behind the `alloc` feature.
```rust
# use c8str::c8;
assert_eq!(c8!("hello").as_str(), "hello");
assert_eq!(c8!("hello").as_c_str(), c"hello");
```
## Features
- `alloc` - Enable the `C8String` type. This requires the standard `alloc` or `std` crates.
## Recent changes
- 0.2.1:
- Fix `c8format` macro
- 0.2.0:
- Add `c8format` macro
- Add `WithC8Str` trait
- Add some methods
- Change `C8String::new` to take no args and create an empty string without allocating
- Impl `Index<RangeFrom<usize>>` for `C8Str`
- MSRV 1.81
- 0.1.2
- Make `C8Str::from_ptr[_unchecked]` const
- 0.1.1
- Show documentation for all features on docs.rs
- 0.1.0
- First release