async_transmit/transmit/
async_channel.rs

1use 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}