cog_task/action/core/
event.rs1use 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}