9 个版本

0.3.2 2021年10月10日
0.3.1 2021年10月8日
0.2.1 2021年10月4日
0.2.0 2021年9月26日
0.1.4 2021年9月22日

#2296 in 编码

Download history 60/week @ 2024-03-10 15/week @ 2024-03-17 29/week @ 2024-03-24 52/week @ 2024-03-31 32/week @ 2024-04-07 5/week @ 2024-04-14

1,023 monthly downloads

MIT 许可证

115KB
2K SLoC

httlib-protos

此crate实现了Protocol Buffers二进制协议(v3proto3)),用于对数据进行编码和解码,以从和到线格式进行转换。该协议深入处理优化在线上数据类型的表示,以便客户端和服务器之间传输尽可能少的数据。

Documentation Source

关于

Protocol Buffers,也称为protosprotobufs,是由Google最初开发的一种开源接口描述语言和库,允许类似JSON的数据消息在线上传输而无需不必要的负载。今天,它最相关的是gRPC的上下文,其中基于Protocol Buffers描述为任意编程语言生成RPC服务器和客户端代码。

Protocol Buffers的主要目标是加快在网络上传输强类型键值消息对象的速度,这反过来意味着减少从A到B在线上传输的数据量。

RESTRPC是现在被认为是Web开发中API开发的一种事实上的方式的概念。客户端和服务器之间的通信主要是关于在JSON格式下传输数据。这是用户友好的,但在网络层面上高度不优化。

Protocol Buffers解决了这个问题,并且是最优化的协议之一,其受欢迎程度也在增长。

此库不是用于生成客户端和服务器代码的。crate专注于低级别的数据压缩和解压缩,以在线传输类型对象。它提供了Protocol Buffer二进制协议的完整实现。

用法

编码示例

use httlib_protos::{Encoder, EncoderLit};

let encoder = Encoder::default();

let mut dst = Vec::new();
encoder.encode((&1, &150i32), &mut dst).unwrap(); // common type
encoder.encode((&2, EncoderLit::SInt32(&-150i32)), &mut dst).unwrap(); // specific type

解码示例

use httlib_protos::{Decoder, DecoderLit};

let mut decoder = Decoder::default();

let mut buf = vec![0x85, 0x35, 0x85];

let mut dst = vec![];
let size = decoder.decode(&mut buf, &mut dst).unwrap();

for (tag, typ, byt) in dst.drain(..) {
    if tag == 1 {
        i32::from(DecoderLit::Int32(byt));
    }
}

文章

许可证:MIT

无运行时依赖