#sender-receiver #future #abstract #generic #crossbeam #std #crossbeam-channel

generic-channel

在几个通道实现(std、crossbeam-channel、futures)之间提供通用的 SenderReceiver 抽象

3 个不稳定版本

0.2.0 2019年1月31日
0.1.1 2019年1月31日
0.1.0 2019年1月30日

8#sender-receiver

每月23次 下载
用于 tentacle-ping

MIT 许可证

11KB
159

Generic-channel

Crates.io MIT licensed Build Status 文档

Generic-channel 提供了在 Rust 社区中广泛使用的几种通道实现之间的通用抽象特性 SenderReceiver

目前支持的通道实现

  • std
  • crossbeam-channel
  • futures

注意:您需要在 Cargo.toml 中启用这些功能,使用 all 标志启用所有功能。

处理函数只想处理发送者或接收者发送/接收消息,而不关心实际类型或发送者是否为 crossbeam 发送者或 futures 发送者。

示例

# extern crate generic_channel;
# extern crate crossbeam_channel;
use generic_channel::{Sender, TrySendError};

// this method do not care about sender type.
fn event_producer<S: Sender<i32>>(sender: S) -> Result<(), TrySendError<i32>> {
    for i in 1..10 {
        sender.try_send(i)?
    }
    Ok(())
}

// we can pass crossbeam channel to event_producer
let (sender, receiver) = crossbeam_channel::unbounded::<i32>();
event_producer(sender);
assert_eq!((1..10).map(|_| receiver.recv().unwrap()).collect::<Vec<_>>(), (1..10).collect::<Vec<_>>());

// we can also pass a std Sender or a futures Sender
let (sender, receiver) = std::sync::mpsc::channel::<i32>();
event_producer(sender);
assert_eq!((1..10).map(|_| receiver.recv().unwrap()).collect::<Vec<_>>(), (1..10).collect::<Vec<_>>());

文档

通用通道文档

许可证

MIT

依赖项

~98KB