rsiot/components/shared_tasks/
mpsc_to_broadcast.rs1use tokio::sync::{broadcast, mpsc};
4
5use crate::{
6 executor::{CmpInOut, ComponentError},
7 message::{Message, MsgDataBound},
8};
9
10pub struct Task<T> {
12 pub input: mpsc::Receiver<T>,
14
15 pub output: broadcast::Sender<T>,
17}
18
19impl<T> Task<T> {
20 pub async fn spawn(mut self) -> Result<(), Error> {
22 while let Some(msg) = self.input.recv().await {
23 self.output.send(msg).map_err(|_| Error::BroadcastSend)?;
24 }
25 Ok(())
26 }
27}
28
29#[allow(missing_docs)]
30#[derive(thiserror::Error, Debug)]
31pub enum Error {
32 #[error(transparent)]
33 Component(#[from] ComponentError),
34
35 #[error("BroadcastSend")]
36 BroadcastSend,
37}