rsiot/components/shared_tasks/
mpsc_to_msgbus.rsuse tokio::sync::mpsc;
use crate::{
executor::{CmpInOut, ComponentError},
message::{Message, MsgDataBound, ServiceBound},
};
pub struct MpscToMsgBus<TMsg, TService>
where
TMsg: MsgDataBound,
TService: ServiceBound,
{
pub input: mpsc::Receiver<Message<TMsg>>,
pub msg_bus: CmpInOut<TMsg, TService>,
}
impl<TMsg, TService> MpscToMsgBus<TMsg, TService>
where
TMsg: MsgDataBound,
TService: ServiceBound,
{
pub async fn spawn(mut self) -> Result<(), Error> {
while let Some(msg) = self.input.recv().await {
self.msg_bus.send_output(msg).await?;
}
Ok(())
}
}
#[allow(missing_docs)]
#[derive(thiserror::Error, Debug)]
pub enum Error {
#[error(transparent)]
Component(#[from] ComponentError),
}