async_transmit/transmit/
async_channel.rs1use async_channel::{SendError, Sender};
2use async_trait::async_trait;
3
4use crate::transmit::Transmit;
5
6#[async_trait]
7impl<I> Transmit for Sender<I>
8where
9 I: Send,
10{
11 type Item = I;
12 type Error = SendError<I>;
13
14 async fn transmit(&mut self, item: Self::Item) -> Result<(), Self::Error> {
15 Sender::send(self, item).await?;
16 Ok(())
17 }
18}
19
20#[cfg(test)]
21mod tests {
22 use super::super::assert_transmit;
23 use super::*;
24
25 use anyhow::Result;
26 use futures_await_test::async_test;
27
28 #[async_test]
29 async fn async_channel_sender_is_transmit() -> Result<()> {
30 let (s, r) = async_channel::unbounded::<&'static str>();
31
32 let mut t = assert_transmit(s);
33 t.transmit("Hello").await?;
34 t.transmit("World").await?;
35 drop(t);
36 assert_eq!(r.recv().await.ok(), Some("Hello"));
37 assert_eq!(r.recv().await.ok(), Some("World"));
38 assert_eq!(r.recv().await.ok(), None);
39
40 Ok(())
41 }
42}