binrw 0.15.1

A Rust crate for helping read structs from binary data using ✨macro magic✨
Documentation
use binrw::{io::Cursor, BinRead};

#[test]
fn unit_struct_magic() {
    #[derive(BinRead, Debug)]
    #[br(big, magic = 1u16)]
    struct Test;

    Test::read(&mut Cursor::new(b"\x00\x01")).unwrap();
    let error = Test::read(&mut Cursor::new(b"\x00\x00")).expect_err("accepted bad data");
    assert!(matches!(error, binrw::Error::BadMagic { .. }));
}

#[test]
fn unit_struct_import_pre_assert() {
    #[derive(BinRead, Debug)]
    #[br(import { succeed: bool }, pre_assert(succeed))]
    struct Test;

    Test::read_args(&mut Cursor::new(b""), binrw::args! { succeed: true }).unwrap();
    let error = Test::read_args(&mut Cursor::new(b""), binrw::args! { succeed: false })
        .expect_err("accepted negative pre-assert");
    assert!(matches!(error, binrw::Error::AssertFail { .. }));
}