# `::byte-strings`
Rust zero-cost byte strings manipulation, for a better and safer FFI
[](
https://github.com/danielhenrymantilla/byte-strings-rs)
[](
https://crates.io/crates/byte-strings)
[](
https://docs.rs/byte-strings)
[](
https://gist.github.com/danielhenrymantilla/8e5b721b3929084562f8f65668920c33)
[](
https://github.com/danielhenrymantilla/byte-strings-rs/blob/master/LICENSE-ZLIB)
[](
https://github.com/danielhenrymantilla/byte-strings-rs/actions)
## Example
Featuring the `c_str!` macro to create **valid C string literals** with
literally no runtime cost!
```rust
#[macro_use]
extern crate byte_strings;
/// Some lib
mod safe {
use ::std::{
ffi::CStr,
os::raw::{c_char, c_int},
};
/// private unsafe C FFI
mod ffi {
use super::*;
extern "C" {
pub
fn puts (_: *const c_char)
-> c_int
;
}
}
/// lib API: safe Rust wrapper => uses `CStr`
pub
fn puts (message: &'_ CStr)
-> i32
{
unsafe {
ffi::puts(message.as_ptr()) as i32
}
}
}
fn main ()
{
safe::puts(c!("Hello, World!"));
}
```