8个版本 (4个稳定版)
1.0.3 | 2023年4月9日 |
---|---|
1.0.1 | 2023年2月17日 |
1.0.0 | 2023年1月6日 |
0.1.3 | 2022年12月11日 |
#167 在 网络编程
每月7,057次下载
在 2 个 crate中使用
61KB
1K SLoC
buf-list
字节块片段的分段列表。
概述
此crate提供了一个BufList
类型,该类型是Bytes
块列表。该类型实现了bytes::Buf
,因此可以用于任何使用Buf
的API。
BufList
的主要用例是缓冲作为流接收的数据块,而不必将它们复制到单个连续的内存块中。然后可以将BufList
传递到任何接受Buf
的API。
如果你曾经想要一个Vec<Bytes>
或一个VecDeque<Bytes>
,那么这个类型就是为你准备的。
光标
此crate还提供了Cursor
,它是一个围绕BufList
的光标类型。围绕BufList
的光标实现了Seek
、Read
和BufRead
,类似于std::io::Cursor
。
示例
将块收集到BufList
中,然后一次性将它们全部写入标准错误
use buf_list::BufList;
use tokio::io::AsyncWriteExt;
let mut buf_list = BufList::new();
buf_list.push_chunk(&b"hello "[..]);
buf_list.push_chunk(&b"world"[..]);
buf_list.push_chunk(&b"!"[..]);
let mut stderr = tokio::io::stderr();
stderr.write_all_buf(&mut buf_list).await?;
将可出错的Bytes
流收集到BufList
use buf_list::BufList;
use bytes::Bytes;
use futures::TryStreamExt;
// A common example is a stream of bytes read over HTTP.
let stream = futures::stream::iter(
vec![
Ok(Bytes::from_static(&b"laputa, "[..])),
Ok(Bytes::from_static(&b"castle "[..])),
Ok(Bytes::from_static(&b"in the sky"[..]))
],
);
let buf_list = stream.try_collect::<BufList>().await?;
assert_eq!(buf_list.num_chunks(), 3);
转换为Stream
可以将BufList
转换为futures::Stream
或TryStream
的Bytes
块流。使用此方法进行转换
(一旦 Stream
和/或 TryStream
成为稳定 Rust 的一部分,此内容将被暴露为 BufList
上的 API。)
use buf_list::BufList;
use bytes::Bytes;
use futures::{Stream, TryStream};
fn into_stream(buf_list: BufList) -> impl Stream<Item = Bytes> {
futures::stream::iter(buf_list)
}
fn into_try_stream<E>(buf_list: BufList) -> impl TryStream<Ok = Bytes, Error = E> {
futures::stream::iter(buf_list.into_iter().map(Ok))
}
可选功能
-
tokio1
:启用此功能后,Cursor
实现了tokio
包的AsyncSeek
、AsyncRead
和AsyncBufRead
。 -
futures03
:启用此功能后,Cursor
实现了futures
包的AsyncSeek
、AsyncRead
和AsyncBufRead
。注意,支持
futures03
意味着以公共接口导出 0.x 类型。这违反了 C-STABLE 指南。然而,buf-list
的维护者认为这是可以接受的,因为futures03
是一个可选功能,且不是buf-list
的关键。随着futures
包的新版本发布,buf-list
也将支持它们异步特质的版本。
最低支持的 Rust 版本
最低支持的 Rust 版本 (MSRV) 为 1.39,与 bytes
包相同。可选功能可能导致 MSRV 的提升。
预计 MSRV 在未来不会改变。如果 MSRV 发生变化,它将伴随 buf-list
的主要版本号的提升。
贡献
欢迎提交拉取请求!请遵循 行为准则。
许可证
buf-list 版权所有 2022 buf-list 贡献者。保留所有权利。
从 linkerd2-proxy 复制并改编;由 Eliza Weisman 编写的原始代码,版权所有 2018 linkerd2-proxy 作者。保留所有权利。
根据 Apache License,版本 2.0(“许可证”);除非适用法律要求或经书面同意,否则不得使用这些文件,除非遵守许可证。您可以在以下位置获得许可证副本:
https://apache.ac.cn/licenses/LICENSE-2.0
除非适用法律要求或经书面同意,否则在许可证下分发的软件按“原样”提供,不提供任何明示或暗示的保证或条件。有关许可证中规定的权限和限制的具体语言,请参阅许可证。
依赖关系
~0.1–1.3MB
~22K SLoC