#serialization #downcast #pi #object #concrete #triat #binary-encoding

nightly pi_bon

attempt to downcast the triat object to a concrete type

7 releases

0.2.3 Jan 25, 2024
0.2.2 Jan 23, 2024
0.2.1 Apr 20, 2023
0.2.0 Aug 8, 2022
0.1.0 Feb 28, 2022

#305 in Encoding

Download history 29/week @ 2023-12-18 26/week @ 2023-12-25 37/week @ 2024-01-08 19/week @ 2024-01-15 46/week @ 2024-01-22 8/week @ 2024-01-29 22/week @ 2024-02-05 37/week @ 2024-02-12 109/week @ 2024-02-19 54/week @ 2024-02-26 53/week @ 2024-03-04 49/week @ 2024-03-11 44/week @ 2024-03-18 100/week @ 2024-03-25 159/week @ 2024-04-01

364 downloads per month
Used in 19 crates (4 directly)

MIT/Apache

82KB
2.5K SLoC

一种二进制序列化/反序列化策略,用于将结构转换为字节,反之亦然!


lib.rs:

二进制对象表示法 模块 Binary Object Notation

本模块定义了一个使用二进制表示数据的协议,并实现该协议

模块提供写的接口,将数据按照协议序列化为二进制。

提供读的接口,将满足协议的二进制反序列化为数据。

TODO 为本协议实现Serializer、Deserializer

协议内容:

小端-非网络字节序,和quic一致 用于通讯的类型需要压缩表示,充分利用第一个字节 0=null 1=false 2=true 3=浮点数0.0,4=浮点数1.0,5=16位浮点数,6=32位浮点数,7=64位浮点数,8=128位浮点数; 9=8位负整数,10=16位负整数,11=32位负整数,12=48位负整数,13=64位负整数,14=128位负整数 1535= -119 36=8位正整数,37=16位正整数,38=32位正整数,39=48位正整数,40=64位正整数,41=128位正整数 42-106=0-64长度的UTF8字符串, 107=8位长度的UTF8字符串,108=16位长度的UTF8字符串,109=32位长度的UTF8字符串,110=48位长度的UTF8字符串 111-175=0-64长度的二进制数据, 176=8位长度的二进制数据,177=16位长度的二进制数据,178=32位长度的二进制数据,179=48位长度的二进制数据 180-244=0-64长度的容器,包括对象、数组和map、枚举 245=8位长度的容器,246=16位长度的容器,247=32位长度的容器,248=48位长度的容器 之后的一个4字节的整数表示类型。 类型: 0 表示忽略 1 通用对象 2 通用数组 3 通用map 如果是通用对象、数组、map,后面会有一个动态长度的整数,表示元素的数量。 容器,由于有总大小的描述,从而可以只对感兴趣的部分作反序列化 TODO 定义一个全类型的枚举 enum BonType, ReadNext WriteNext 的 T 应该为BonType。提供一个 read(&self) -> BonType

Dependencies

~650KB
~13K SLoC