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 编码
1,023 monthly downloads
115KB
2K SLoC
httlib-protos
此crate实现了Protocol Buffers二进制协议(v3
(proto3
)),用于对数据进行编码和解码,以从和到线格式进行转换。该协议深入处理优化在线上数据类型的表示,以便客户端和服务器之间传输尽可能少的数据。
关于
Protocol Buffers,也称为protos
或protobufs
,是由Google最初开发的一种开源接口描述语言和库,允许类似JSON的数据消息在线上传输而无需不必要的负载。今天,它最相关的是gRPC的上下文,其中基于Protocol Buffers描述为任意编程语言生成RPC服务器和客户端代码。
Protocol Buffers的主要目标是加快在网络上传输强类型键值消息对象的速度,这反过来意味着减少从A到B在线上传输的数据量。
REST和RPC是现在被认为是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