cog_task/action/core/
event.rs

1use crate::action::{Action, Props, StatefulAction, INFINITE};
2use crate::comm::{QWriter, Signal};
3use crate::resource::{IoManager, LoggerSignal, ResourceManager};
4use crate::server::{AsyncSignal, Config, State, SyncSignal};
5use eyre::Result;
6use serde::{Deserialize, Serialize};
7use serde_cbor::Value;
8
9#[derive(Debug, Deserialize, Serialize)]
10pub struct Event(String);
11
12stateful!(Event { name: String });
13
14impl Action for Event {
15    #[inline(always)]
16    fn stateful(
17        &self,
18        _io: &IoManager,
19        _res: &ResourceManager,
20        _config: &Config,
21        _sync_writer: &QWriter<SyncSignal>,
22        _async_writer: &QWriter<AsyncSignal>,
23    ) -> Result<Box<dyn StatefulAction>> {
24        Ok(Box::new(StatefulEvent {
25            done: false,
26            name: self.0.clone(),
27        }))
28    }
29}
30
31impl StatefulAction for StatefulEvent {
32    impl_stateful!();
33
34    fn props(&self) -> Props {
35        INFINITE.into()
36    }
37
38    fn start(
39        &mut self,
40        _sync_writer: &mut QWriter<SyncSignal>,
41        async_writer: &mut QWriter<AsyncSignal>,
42        _state: &State,
43    ) -> Result<Signal> {
44        async_writer.push(LoggerSignal::Append(
45            "event".to_owned(),
46            (self.name.clone(), Value::Text("start".to_owned())),
47        ));
48        Ok(Signal::none())
49    }
50
51    fn stop(
52        &mut self,
53        _sync_writer: &mut QWriter<SyncSignal>,
54        async_writer: &mut QWriter<AsyncSignal>,
55        _state: &State,
56    ) -> Result<Signal> {
57        async_writer.push(LoggerSignal::Append(
58            "event".to_owned(),
59            (self.name.clone(), Value::Text("stop".to_owned())),
60        ));
61        Ok(Signal::none())
62    }
63}