rsiot/components/cmp_plc/tasks/
save_input_in_cache.rs

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
use crate::{
    executor::{Cache, CmpInOut},
    message::{MsgDataBound, ServiceBound},
};

pub struct SaveInputInCache<TMsg, TService>
where
    TMsg: MsgDataBound,
    TService: ServiceBound,
{
    pub in_out: CmpInOut<TMsg, TService>,
    pub input_msg_cache: Cache<TMsg>,
}

impl<TMsg, TService> SaveInputInCache<TMsg, TService>
where
    TMsg: MsgDataBound,
    TService: ServiceBound,
{
    pub async fn spawn(mut self) -> super::Result<()> {
        while let Ok(msg) = self.in_out.recv_input().await {
            self.input_msg_cache.insert(msg).await
        }
        Ok(())
    }
}