# rawbytes
A Rust crate to view a structure as a plain byte array (`&[u8]`).
Super simple. Tiny. Zero dependencies.
This is a safer interface to `slice::from_raw_parts_{mut}()`
Example usage:
```rust
use rawbytes::RawBytes;
#[repr(C, packed(4))])]
struct Foo {
x: [u32; 32],
}
#[test]
fn test() {
let mut foo = Foo { x: [0; 32] };
let foo_bytes = RawBytes::bytes_view(&foo);
assert_eq!(foo_bytes.len(), 128);
let foo_bytes = RawBytes::bytes_view_mut(&mut foo);
foo_bytes[0] = 1;
assert_eq!(foo.x[0], 1);
}
```
Note that structures must should have the `C` representation to ensure that a new Rust release is not going to change the representation.
## Warning and alternatives
Warning: this crate contains two instances of the `unsafe` keyword, because there are no other ways to achieve this in Rust. Still, you may be named and shamed for using a crate that perfectly does the job, but includes that keyword.
An alternative is the `zerocopy` crate. It's bigger, far more complex, not any faster, and it also require the `unsafe` keyword. But it's maintained by a Google employee, so you may be less named and shamed.