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