Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

dmgolembiowski/binrw

Open more actions menu
 
 

Repository files navigation

binrw

crates tests docs.rs codecov discord matrix: #binrw:matrix.org

binrw helps you write maintainable & easy-to-read declarative binary data readers and writers using ✨macro magic✨.

Features

  • Generates efficient data parsers and serialisers for structs and enums using #[derive]
  • Reads and writes data from any source using standard io::Read and io::Write streams
  • Directives in attributes handle common binary parsing tasks like matching magic numbers, byte ordering, padding & alignment, data validation, and more
  • Includes reusable types for common data structures like null-terminated strings and data indirection using offsets
  • Parses types from third-party crates using free functions or value maps
  • Uses efficient in-memory representations (does not require #[repr(C)] or #[repr(packed)])
  • Code in attributes is written as code, not as strings, for improved ergonomics and first-class IDE support
  • Supports no_std

Usage

#[derive(BinRead)]
#[br(magic = b"DOG", assert(name.len() != 0))]
struct Dog {
    bone_pile_count: u8,

    #[br(big, count = bone_pile_count)]
    bone_piles: Vec<u16>,

    #[br(align_before = 0xA)]
    name: NullString
}

let mut reader = Cursor::new(b"DOG\x02\x00\x01\x00\x12\0\0Rudy\0");
let dog: Dog = reader.read_ne().unwrap();
assert_eq!(dog.bone_piles, &[0x1, 0x12]);
assert_eq!(dog.name.into_string(), "Rudy")

For more information, including a more detailed overview of binrw, visit the documentation.

About

A Rust crate for helping parse and rebuild binary data using ✨macro magic✨.

Resources

Contributing

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.