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