#overlay #struct #transmute #macro #reinterpret #debugging

overlay_macro

实现Overlay的proc-macro,将字节数组重新解释为位/字节打包的结构体

6个稳定版本

2.0.0 2024年7月3日
1.2.0 2024年6月20日
1.1.1 2024年6月20日
1.1.0 2024年5月31日
1.0.1 2024年5月30日

#532嵌入式开发

Download history 342/week @ 2024-05-28 20/week @ 2024-06-04 19/week @ 2024-06-11 236/week @ 2024-06-18 51/week @ 2024-06-25 207/week @ 2024-07-02 1/week @ 2024-07-09 5/week @ 2024-07-16

每月216次下载

GPL-3.0-or-later

25KB
434 代码行

生成可以叠加的结构体的proc-macro。有关使用方法和示例,请参阅文档。

使用方法

#[overlay]
#[derive(Clone, Debug)]
pub struct InquiryCommand {
    #[overlay(byte=0, bits=0..8)]
    pub op_code: u8,

    #[overlay(byte=1)]
    pub enable_vital_product_data: bool,

    #[overlay(byte=2, bits=0..=7)]
    pub page_code: u8,

    #[overlay(bytes=3..=4, bits=0..=7)]
    pub allocation_length: u16,

    ...
}

这将创建一个围绕字节数组的包装结构体,并为每个"字段"生成getter和setter,访问给定偏移的字节/位。

待办事项

  • 支持嵌套结构体
  • 支持大于 u32 的单个字段 ?
  • compile_error!() / 移除 unwrap / expect
    • 并使用 trybuild
    • 发出一个假的结构体以避免进一步的错误
  • 允许在字节/位范围内缺少起始/结束位置
  • 升级到 syn 2.0
  • 不要在枚举成员上删除所有其他属性
  • 关闭所有 syn (crate 依赖) 功能(除必要的以外)

依赖关系

~1.5MB
~34K SLoC