Skip to main content

shelly/
runtime.rs

1use serde_json::Value;
2use std::collections::BTreeMap;
3
4/// Structured event payload emitted by adapter-managed runtime tasks.
5#[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/// Internal runtime commands collected from `Context` and executed by the adapter.
38#[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}