#hpack #http2 #codec #encoder #decoder #rfc #table

hpack_codec

HPACK (RFC 7541) 编码器和解码器

2 个版本

0.1.1 2019年11月12日
0.1.0 2017年9月18日

#390 in 压缩

Download history 1/week @ 2024-07-03

每月60次下载
用于 httimple

MIT 许可证

78KB
2K SLoC

hpack_codec

Documentation Build Status Code Coverage License: MIT

HPACK (RFC 7541) 编码器和解码器。

文档

示例

use hpack_codec::{Encoder, Decoder};
use hpack_codec::field::{HeaderField, LiteralHeaderField as Field};
use hpack_codec::table::{StaticEntry, Index};

// Encoding
let mut encoder = Encoder::new(4096);
let mut header = encoder.enter_header_block(Vec::new()).unwrap();
header.encode_field(StaticEntry::MethodGet).unwrap();
header.encode_field(Field::with_indexed_name(StaticEntry::Path, b"/hello")).unwrap();
header.encode_field(Field::new(b"foo", b"bar").with_indexing()).unwrap();
header.encode_field(Index::dynamic_table_offset() + 0).unwrap();
let encoded_data = header.finish();

// Decoding
let mut decoder = Decoder::new(4096);
let mut header = decoder.enter_header_block(&encoded_data[..]).unwrap();
assert_eq!(header.decode_field().unwrap(), HeaderField::new(b":method", b"GET").ok());
assert_eq!(header.decode_field().unwrap(), HeaderField::new(b":path", b"/hello").ok());
assert_eq!(header.decode_field().unwrap(), HeaderField::new(b"foo", b"bar").ok());
assert_eq!(header.decode_field().unwrap(), HeaderField::new(b"foo", b"bar").ok());

依赖项

~1.5MB
~38K SLoC