7个版本 (4个重大变更)
0.5.1 | 2024年4月21日 |
---|---|
0.5.0 | 2024年4月1日 |
0.4.0 | 2024年1月13日 |
0.3.1 | 2023年11月29日 |
0.1.0 | 2023年9月5日 |
#954 in Rust模式
每月24次下载
在 6 个crate中使用 (直接使用4个)
73KB
1K SLoC
IROX-STRUCTS
结构体类型特性 - 线性序列化大/小端字节
一个非常简单的“结构体”库,它提供了一个特异。这个库旨在与irox_structs_derive
一起使用,以生成实现。
结构体是在内存中序列化字节线性序列 - 在结构体中按字段顺序序列化,没有相邻或打包。
严格大小
默认情况下,irox_structs_derive
将允许可变大小的类型,如String
和Vec<u8>
。如果您知道您不需要/使用这些,请应用一个#[strict_sizing]
属性,生成器将向结构体添加一个pub const STRUCT_SIZE: usize
。
选择端序
在派生Struct
时应用#[big_endian]
或#[little_endian]
属性,它将使用适当的序列化器。如果未指定,则默认为大端。
示例大端
use irox_structs::Struct;
use irox_tools::bits::Error;
#[derive(Default, Debug, Copy, Clone, Eq, PartialEq, Struct)]
#[strict_sizing]
pub struct UdpHeader {
source_port: u16,
dest_port: u16,
length: u16,
checksum: u16,
}
pub fn main() -> Result<(), Error> {
assert_eq!(8, UdpHeader::STRUCT_SIZE);
let header = UdpHeader {
source_port: 0x0064,
dest_port: 0x0400,
length: 0x1388,
checksum: 0x01C2,
};
let mut output_buf: Vec<u8> = Vec::new();
header.write_to(&mut output_buf)?;
assert_eq!(output_buf.len(), 8);
assert_eq!(&[0x00u8, 0x64, 0x04, 0x00, 0x13, 0x88, 0x01, 0xC2],
output_buf.as_slice());
let parsed = UdpHeader::parse_from(&mut output_buf.as_slice())?;
assert_eq!(header, parsed);
Ok(())
}
示例小端
use irox_structs::Struct;
use irox_tools::bits::Error;
#[derive(Default, Debug, Copy, Clone, Eq, PartialEq, Struct)]
#[little_endian]
#[strict_sizing]
pub struct UdpHeader {
source_port: u16,
dest_port: u16,
length: u16,
checksum: u16,
}
pub fn main() -> Result<(), Error> {
assert_eq!(8, UdpHeader::STRUCT_SIZE);
let header = UdpHeader {
source_port: 0x0064,
dest_port: 0x0400,
length: 0x1388,
checksum: 0x01C2,
};
let mut output_buf: Vec<u8> = Vec::new();
header.write_to(&mut output_buf)?;
assert_eq!(output_buf.len(), 8);
assert_eq!(&[0x64u8, 0x00, 0x00, 0x04, 0x88, 0x13, 0xC2, 0x01],
output_buf.as_slice());
let parsed = UdpHeader::parse_from(&mut output_buf.as_slice())?;
assert_eq!(header, parsed);
Ok(())
}
无-STD支持
- 完全无-STD兼容
特性
- 无
模块
模块 | [no_std] ? |
|
---|---|---|
irox_structs |
包含“结构体”类型 |
依赖项
~0.6–1MB
~23K SLoC