1use std::collections::HashMap;
3
4#[derive(Debug, Clone, PartialEq)]
8pub struct SignalDef {
9 pub name: String,
10 pub payload: Vec<String>,
11}
12
13#[derive(Debug, Default)]
14pub struct SignalRegistry {
15 defs: HashMap<String, SignalDef>,
16}
17
18impl SignalRegistry {
19 pub fn new() -> Self {
20 Self::default()
21 }
22
23 pub fn register(&mut self, name: impl Into<String>, payload: Vec<String>) {
24 let name = name.into();
25 self.defs.insert(name.clone(), SignalDef { name, payload });
26 }
27
28 pub fn get(&self, name: &str) -> Option<&SignalDef> {
29 self.defs.get(name)
30 }
31
32 pub fn len(&self) -> usize {
33 self.defs.len()
34 }
35
36 pub fn is_empty(&self) -> bool {
37 self.defs.is_empty()
38 }
39}
40
41#[cfg(test)]
42mod tests {
43 use super::*;
44
45 #[test]
46 fn registry_records_name_and_payload() {
47 let mut registry = SignalRegistry::new();
48 registry.register("health_changed", vec!["int".to_string()]);
49 let def = registry.get("health_changed").unwrap();
50 assert_eq!(def.payload, vec!["int".to_string()]);
51 }
52}