#stream #closures #drop #connection #future #wrap #dropped

drop-stream

一个包装了另一个流并在被释放时调用闭包的流

5个不稳定版本

0.3.2 2024年7月21日
0.3.1 2024年5月26日
0.3.0 2022年11月23日
0.2.0 2022年11月23日
0.1.0 2022年5月23日

#229 in 异步

Download history 109/week @ 2024-05-03 86/week @ 2024-05-10 59/week @ 2024-05-17 341/week @ 2024-05-24 133/week @ 2024-05-31 150/week @ 2024-06-07 205/week @ 2024-06-14 209/week @ 2024-06-21 131/week @ 2024-06-28 117/week @ 2024-07-05 76/week @ 2024-07-12 271/week @ 2024-07-19 201/week @ 2024-07-26 520/week @ 2024-08-02 410/week @ 2024-08-09 380/week @ 2024-08-16

1,579 monthly downloads

MIT 许可证

9KB
115 代码行数(不包括注释)

Drop Stream

crates.io license docs CI

一个包装了另一个流并在被释放时调用闭包的流。对于使用流进行数据传输的库非常有用,当对端断开连接时需要连接。

此crate仅依赖于futures-core,因此具有最小依赖性,适用于任何利用futures的项目。

示例

use futures::Stream;
use drop_stream::DropStream;
let test_stream = futures::stream::repeat(true);
{
    let wrapped_stream = DropStream::new(test_stream, move || {
        println!("Stream has been dropped!");
    });
    let mut wrapped_stream = Box::pin(wrapped_stream);
    let waker = futures::task::noop_waker();
    let mut context = futures::task::Context::from_waker(&waker);
    assert_eq!(
        wrapped_stream.as_mut().poll_next(&mut context),
        std::task::Poll::Ready(Some(true))
    );
}

致谢

我要感谢 Aadam Zocolo 允许我在crates.io上接管crate名称 "drop-stream" 并替换他的0.1版本。

依赖项

~330–800KB
~18K SLoC