1use serde_json::Value;
2use std::collections::BTreeMap;
3
4#[derive(Debug, Clone, PartialEq)]
6pub struct RuntimeEvent {
7 pub event: String,
8 pub target: Option<String>,
9 pub value: Value,
10 pub metadata: BTreeMap<String, Value>,
11}
12
13impl RuntimeEvent {
14 pub fn new(event: impl Into<String>, value: impl Into<Value>) -> Self {
15 Self {
16 event: event.into(),
17 target: None,
18 value: value.into(),
19 metadata: BTreeMap::new(),
20 }
21 }
22
23 pub fn with_target(
24 target: impl Into<String>,
25 event: impl Into<String>,
26 value: impl Into<Value>,
27 ) -> Self {
28 Self {
29 event: event.into(),
30 target: Some(target.into()),
31 value: value.into(),
32 metadata: BTreeMap::new(),
33 }
34 }
35}
36
37#[derive(Debug, Clone, PartialEq)]
39pub enum RuntimeCommand {
40 ScheduleOnce {
41 id: String,
42 delay_ms: u64,
43 dispatch: RuntimeEvent,
44 },
45 ScheduleInterval {
46 id: String,
47 every_ms: u64,
48 dispatch: RuntimeEvent,
49 },
50 Cancel {
51 id: String,
52 },
53}