use futures::SinkExt;
use futures::channel::mpsc;
use crate::runtime::BlockMeta;
use crate::runtime::MessageOutputs;
use crate::runtime::Pmt;
use crate::runtime::Result;
use crate::runtime::WorkIo;
#[derive(Block)]
#[message_inputs(r#in)]
#[null_kernel]
pub struct MessagePipe {
sender: mpsc::Sender<Pmt>,
}
impl MessagePipe {
pub fn new(sender: mpsc::Sender<Pmt>) -> Self {
Self { sender }
}
async fn r#in(
&mut self,
_io: &mut WorkIo,
_mio: &mut MessageOutputs,
_meta: &mut BlockMeta,
p: Pmt,
) -> Result<Pmt> {
self.sender.send(p).await?;
Ok(Pmt::Null)
}
}