12 个版本 (5 个重大更改)
0.6.0 | 2024年6月5日 |
---|---|
0.5.3 | 2024年5月13日 |
0.5.0 | 2023年12月30日 |
0.4.2 | 2023年12月27日 |
0.1.0 | 2023年11月1日 |
在 编码 中排名 953
每月下载 47 次
26KB
760 行
Orio
serde 的轻量级且简洁的替代品,专注于读写 Vec<u8>
。
#[derive(Io)]
struct Thingy {
#[io(len(u16))]
name: String,
kind: ThingyKind,
#[io(ignore)]
debug: String
}
#[derive(Io)]
enum ThingyKind {
Normal,
Special(#[io(len(u8))] String)
}
let thingy = Thingy {
name: "thing".to_owned(),
kind: ThingyKind::Normal,
debug: "not written".to_owned()
}
let mut bytes = vec![];
thingy.write(&mut bytes);
底层是一个泛型包装器,用于小端字节序的 byteorder,并为结构体和枚举提供了 derive 宏以供使用。
以饼干命名 :)
许可证
lib.rs
:
Orio 是一个相对较小的库,它构建在小端字节序之上。它旨在自动处理序列化类型(如数据包)的样板代码,同时仍然允许用户控制数据的表示。
Io 特性
[Io] 特性允许类型以通用方式写入和读取到字节向量。请参阅其文档了解用法和手动实现。
Derive 宏
derive 宏 #[derive(Io)]
可以用于为您自己的类型轻松实现 Io
。所有序列化字段都必须实现 Io
特性才能使其工作。字段可以添加 #[io(ignore)]
属性,这将在写入整个结构体/枚举时忽略字段。
- 在写入完整的结构体/枚举时忽略该字段。
- 当没有要读取的内容时,请使用
Default
进行读取。一些类型,如String
或Vec
,都有一个可以改变的长度字段。要使用这些类型,请添加#[io(len(TYPE))]
属性,其中TYPE是一个整型,如u8、u16等。这允许您自定义一个字段支持多少数据,例如,对于一个文件名,255字节可能足够,但对于文件内容,您可能希望使用u64。
标准类型
目前支持一些来自std的类型
- 所有数字
字符串
Box
、HashMap
、Option
和实现Io
的类型Vec
。Duration
和SystemTime
。这两个类型都存储为毫秒。Duration使用#[io(len)]
来改变要支持的时长长度。由于u16略超过一分钟,通常您会想要使用u32或u64。
依赖项
~140-300KB