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

MIT 许可证

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 宏以供使用。

以饼干命名 :)

许可证

MIT 许可证


lib.rs:

Orio 是一个相对较小的库,它构建在小端字节序之上。它旨在自动处理序列化类型(如数据包)的样板代码,同时仍然允许用户控制数据的表示。

Io 特性

[Io] 特性允许类型以通用方式写入和读取到字节向量。请参阅其文档了解用法和手动实现。

Derive 宏

derive 宏 #[derive(Io)] 可以用于为您自己的类型轻松实现 Io。所有序列化字段都必须实现 Io 特性才能使其工作。字段可以添加 #[io(ignore)] 属性,这将在写入整个结构体/枚举时忽略字段。

  1. 在写入完整的结构体/枚举时忽略该字段。
  2. 当没有要读取的内容时,请使用Default进行读取。一些类型,如StringVec,都有一个可以改变的长度字段。要使用这些类型,请添加#[io(len(TYPE))]属性,其中TYPE是一个整型,如u8、u16等。这允许您自定义一个字段支持多少数据,例如,对于一个文件名,255字节可能足够,但对于文件内容,您可能希望使用u64。

标准类型

目前支持一些来自std的类型

  • 所有数字
  • 字符串
  • BoxHashMapOption和实现Io的类型Vec
  • DurationSystemTime。这两个类型都存储为毫秒。Duration使用#[io(len)]来改变要支持的时长长度。由于u16略超过一分钟,通常您会想要使用u32或u64。

依赖项

~140-300KB