Skip to content

jedisct1/rust-rawbytes

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 

Repository files navigation

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:

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.

About

A rust crate to view a structure as raw bytes (&[u8])

Resources

Stars

4 stars

Watchers

1 watching

Forks

Packages

 
 
 

Contributors

Languages