rsiot_channel_utils/
component_cache.rs1use std::{collections::HashMap, sync::Arc};
4
5use tokio::sync::{mpsc, Mutex};
6
7use rsiot_messages_core::IMessage;
8
9pub type CacheType<TMessage> = Arc<Mutex<HashMap<String, TMessage>>>;
10
11pub async fn component_cache<TMessage>(
19 mut input: mpsc::Receiver<TMessage>,
20 output: Option<mpsc::Sender<TMessage>>,
21 cache: CacheType<TMessage>,
22) where
23 TMessage: IMessage,
24{
25 while let Some(msg) = input.recv().await {
26 {
27 let mut lock = cache.lock().await;
28 lock.insert(msg.key().clone(), msg.clone());
29 }
30 if let Some(output) = &output {
31 output.send(msg).await.unwrap()
32 }
33 }
34}
35
36pub fn create_cache<TMessage>() -> CacheType<TMessage> {
38 Arc::new(Mutex::new(HashMap::new()))
39}