#macro-derive #pwrite #pread #byte

macro scroll_derive

A macros 1.1 derive implementation for Pread and Pwrite traits from the scroll crate

24 releases

Uses new Rust 2024

0.13.1 Sep 6, 2025
0.13.0 May 26, 2025
0.12.1 Apr 6, 2025
0.12.0 Jan 1, 2024
0.3.0 Mar 15, 2017

#6 in #pread

Download history 565251/week @ 2025-09-21 599512/week @ 2025-09-28 654340/week @ 2025-10-05 628287/week @ 2025-10-12 621702/week @ 2025-10-19 704688/week @ 2025-10-26 680488/week @ 2025-11-02 677107/week @ 2025-11-09 771486/week @ 2025-11-16 530210/week @ 2025-11-23 631542/week @ 2025-11-30 821054/week @ 2025-12-07 770623/week @ 2025-12-14 348185/week @ 2025-12-21 321260/week @ 2025-12-28 807762/week @ 2026-01-04

2,286,895 downloads per month
Used in 118 crates (6 directly)

MIT license

36KB
835 lines

scroll_derive

Macros 1.1 implementing #[derive(Pread, Pwrite)] for https://github.com/m4b/scroll

Add derive annotations to your POD seamlessly and easily:

extern crate scroll;
#[macro_use]
extern crate scroll_derive;

#[derive(Debug, PartialEq, Pread, Pwrite, IOread, IOwrite, SizeWith)]
#[repr(C)]
struct Data {
    id: u32,
    timestamp: f64,
    arr: [u16; 2],
}

use scroll::{Pread, Pwrite, Cread, LE};

fn main (){
    let bytes = [0xefu8, 0xbe, 0xad, 0xde, 0, 0, 0, 0, 0, 0, 224, 63, 0xad, 0xde, 0xef, 0xbe];
    let data: Data = bytes.pread_with(0, LE).unwrap();
    println!("data: {data:?}");
    assert_eq!(data.id, 0xdeadbeefu32);
    let mut bytes2 = vec![0; ::std::mem::size_of::<Data>()];
    bytes2.pwrite_with(data, 0, LE).unwrap();
    let data: Data = bytes.pread_with(0, LE).unwrap();
    let data2: Data = bytes2.pread_with(0, LE).unwrap();
    assert_eq!(data, data2);

    let data: Data = bytes.cread_with(0, LE);
    assert_eq!(data, data2);
}

Dependencies

~150–550KB
~13K SLoC