6个版本
| 0.0.5 | 2022年6月14日 | 
|---|---|
| 0.0.4 | 2021年12月1日 | 
| 0.0.3-dev | 2021年11月30日 | 
| 0.0.2-dev | 2021年11月30日 | 
| 0.0.1-dev | 2021年11月30日 | 
在 过程宏 中排名第 671
16KB
250 行
byteme
一个通过在结构体上实现From trait将结构体转换为Vec并反向转换的过程宏。默认情况下,转换是大端。
我们对结构体有以下假设
- 结构体必须有字段。
- 字段是公开的。
- 字段具有以下类型- u8
- u16
- u32
- u64
- u128
- usize
- [u8;N]
- 枚举
 
- 对于枚举,我们必须附加一个#[byte_me)$size]属性,其中size是正整数类型之一。
- 枚举声明必须具有来自num-derivecrate的#[derive)]的FromPrimitivetrait。
num-derive crate是生成枚举的FromPrimitive trait所必需的。话虽如此,可以使用num-enum crate实现相同的功能。它提供了对枚举数据类型的进一步控制,可能很有用。这里是关于这个话题的讨论。
示例
use byteme::ByteMe;
pub use num_derive::FromPrimitive;
#[derive(Debug, FromPrimitive)]
pub enum Mode {
  Unavailable = 0,
  Unauthenticated = 1,
  Authenticated = 2,
  Encrypted = 4,
}
#[derive(ByteMe, Debug)]
pub struct FrameOne {
  pub unused: [u8; 12],
  #[byte_me(u32)]
  pub mode: Mode,
  pub challenge: [u8; 16],
  pub salt: [u8; 16],
  pub count: u32,
  pub mbz: [u8; 12],
};
let frame = FrameOne {
  unused: [0; 12],
  mode: Mode::Authenticated,
  challenge: [0; 16],
  salt: [0; 16],
  count: 1024,
  mbz: [0; 12],
};
let size = FrameOne::SIZE; // Get the number of bytes in the frame
let bytes: Vec<u8> = frame.into(); // Converts the frame into vector of bytes
let frame: FrameOne = bytes.into(); // Converts the bytes back to frame
许可证:Apache-2.0
依赖项
~1.5MB
~37K SLoC