rsiot/components/shared_tasks/
msgbus_to_broadcast.rs1use tokio::{sync::broadcast::Sender, time::error};
4
5use crate::{
6 executor::CmpInOut,
7 message::{Message, MsgDataBound},
8};
9
10pub struct MsgBusToBroadcast<TMsg>
12where
13 TMsg: MsgDataBound,
14{
15 pub msg_bus: CmpInOut<TMsg>,
17
18 pub output: Sender<Message<TMsg>>,
20}
21
22impl<TMsg> MsgBusToBroadcast<TMsg>
23where
24 TMsg: MsgDataBound,
25{
26 pub async fn spawn(mut self) -> Result<(), Error> {
28 while let Ok(msg) = self.msg_bus.recv_input().await {
29 self.output
30 .send(msg)
31 .map_err(|e| Error::TokioSyncMpsc(e.to_string()))?;
32 }
33 Ok(())
34 }
35}
36
37#[allow(missing_docs)]
38#[derive(thiserror::Error, Debug)]
39pub enum Error {
40 #[error("{0}")]
41 TokioSyncMpsc(String),
42}