Skip to content
Framework for reading and writing to binary files
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
Cargo.toml Major internal rework and version bump Jul 13, 2019
LICENSE Create LICENSE Jul 7, 2019 Fixed example in README Jul 13, 2019



bin_io is a crate inspired greatly by nom and other parser combinator libraries. But bin_io differs from those crates since it aims at providing both reading and writing facilities at the same time, with fewer code.


Add bin_io = "0.2" to your Cargo.toml

Big change in 0.2

In 0.2 bin_io had a massive change, it now uses references while writing, and no longer needs an owned copy. This meant that some things needed to change from the last version, but everything should still work fine (with minor code changes, seq! in particular), so check out the documentation!


use std::io::Cursor;
use bin_io::{ boilerplate, seq, read, write };
use bin_io::numbers::{ be_u8, be_u16 };

#[derive(Debug, PartialEq, Eq)]
struct Thing {
    a: u8,
    b: u16

    fn thing_parser() -> Thing {
            Thing { a, b },
            a: be_u8() =>
            b: be_u16() =>

let mut vec = Vec::new();
let mut cursor = Cursor::new(vec);

let my_thing = Thing {
    a: 0x10, b: 0x20

write(&mut cursor, &my_thing, thing_parser())


let other_thing = read(&mut cursor, thing_parser())

assert_eq!(other_thing, my_thing);
You can’t perform that action at this time.