#byte #chunked #body #http-body #http

uhttp_chunked_bytes

HTTP分块体字节的零分配迭代器

1 个不稳定版本

使用旧的Rust 2015

0.5.0 2017年1月30日

#12 in #chunked


uhttp_json_api 使用

MIT 许可证

15KB
224 代码行,不包括注释

uhttp_chunked_bytes -- HTTP分块体字节的迭代器

文档

这个crate提供了一个零分配迭代器,用于HTTP 分块编码体中的有效载荷字节。它包装了一个给定的原始HTTP体字节的迭代器,解码分块传输协议,并产生每个块的数据字节。结果可以输入到基于字节的解析器中,例如 serde_json::from_iter

这个实现支持目标平台上可以存储的块长度,直到 usize。丢弃块扩展参数,并且不处理尾部标题,尽管在分块有效载荷迭代结束时可以从包装的源迭代器中检索它们。

示例

use uhttp_chunked_bytes::ChunkedBytes;

// Create a sample json body `{"key": 42}`, split over two chunks.
let body = b"4\r\n{\"ke\r\n7\r\ny\": 42}\r\n0\r\n\r\n";
let mut stream = body.iter().map(|&b| Ok(b));

let mut bytes = ChunkedBytes::new(&mut stream);
assert_eq!(bytes.next().unwrap().unwrap(), b'{');
assert_eq!(bytes.next().unwrap().unwrap(), b'"');
assert_eq!(bytes.next().unwrap().unwrap(), b'k');
assert_eq!(bytes.next().unwrap().unwrap(), b'e');
assert_eq!(bytes.next().unwrap().unwrap(), b'y');
assert_eq!(bytes.next().unwrap().unwrap(), b'"');
assert_eq!(bytes.next().unwrap().unwrap(), b':');
assert_eq!(bytes.next().unwrap().unwrap(), b' ');
assert_eq!(bytes.next().unwrap().unwrap(), b'4');
assert_eq!(bytes.next().unwrap().unwrap(), b'2');
assert_eq!(bytes.next().unwrap().unwrap(), b'}');
assert!(bytes.next().is_none());

使用方法

crate 可以通过cargo通过在 Cargo.toml 中添加它作为依赖项来使用

[dependencies]
uhttp_chunked_bytes = "0.5.0"

并在crate根目录中导入它

extern crate uhttp_chunked_bytes;

没有运行时依赖