#macro-derive #macro #derive #pread #pwrite #byte

进程宏 scroll_derive

scroll crate中Pread和Pwrite特质的Macros 1.1实现

21个不稳定版本

0.12.0 2024年1月1日
0.11.1 2023年6月19日
0.11.0 2022年1月2日
0.10.5 2021年1月25日
0.3.0 2017年3月15日

#4#pwrite

Download history 183487/week @ 2024-04-03 136623/week @ 2024-04-10 150742/week @ 2024-04-17 145988/week @ 2024-04-24 138049/week @ 2024-05-01 139432/week @ 2024-05-08 154947/week @ 2024-05-15 143501/week @ 2024-05-22 163402/week @ 2024-05-29 148862/week @ 2024-06-05 152964/week @ 2024-06-12 141545/week @ 2024-06-19 143766/week @ 2024-06-26 129842/week @ 2024-07-03 136790/week @ 2024-07-10 118192/week @ 2024-07-17

556,823 每月下载量
用于 81 个crate (6个直接使用)

MIT 许可证

22KB
507 代码行

scroll_derive

实现#[derive(Pread, Pwrite)]的Macros 1.1,针对https://github.com/m4b/scroll

无缝、简单地添加derive注释到你的POD中

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);
}

依赖项

~300–760KB
~18K SLoC