1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
use crate::channel::{ClosedChannel, Receiver, Sender};
use crate::interface::{InputConnector, OutputConnector};
use crate::message::Message;
use async_trait::async_trait;
use tokio::sync::mpsc;
#[async_trait]
impl InputConnector for mpsc::Receiver<Message> {
async fn run(mut self: Box<Self>, sender: Sender) -> Result<(), ClosedChannel> {
loop {
match self.recv().await {
Some(message) => sender.send(message).await?,
None => break Ok(()),
};
}
}
}
#[async_trait]
impl OutputConnector for mpsc::Sender<Message> {
async fn run(self: Box<Self>, mut receiver: Receiver) -> Result<(), ClosedChannel> {
loop {
let message = receiver.recv().await?;
if self.send(message).await.is_err() {
break Ok(());
}
}
}
}