1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//! Компонент для сохранения сообщений в кеше. Сохраняется только последний вариант
//!
//! Кеш представляет собой `HashMap`, а точнее `Arc<Mutex<RwLock<String, TMessage>>>`

use super::{cache, CacheType, ComponentInput};
use rsiot_messages_core::IMessage;

pub use cache::create_cache;

#[derive(Clone, Debug)]
pub struct Config<TMessage> {
    pub cache: CacheType<TMessage>,
}

pub async fn cmpbase_cache<TMessage>(mut input: ComponentInput<TMessage>, config: Config<TMessage>)
where
    TMessage: IMessage,
{
    while let Ok(msg) = input.recv().await {
        {
            let mut lock = config.cache.write().await;
            let key = msg.key().clone();
            let value = msg.clone();
            lock.insert(key, value);
        }
    }
}