nodium_plugins/
registry.rs1use nodium_events::NodiumEvents;
4use nodium_pdk::{NodiuimPlugin, NodiuimNode, NodiuimService, NodiuimWindow};
5use tokio::sync::Mutex;
6use std::{collections::HashMap, sync::Arc};
7
8pub struct Registry {
9 plugins: HashMap<String, Box<dyn NodiuimPlugin>>,
10 windows: HashMap<String, NodiuimWindow>,
11 nodes: HashMap<String, NodiuimNode>,
12 services: HashMap<String, NodiuimService>,
13}
14
15impl Registry {
16 pub fn new() -> Self {
17 Registry {
18 plugins: HashMap::new(),
19 nodes: HashMap::new(),
20 services: HashMap::new(),
21 windows: HashMap::new(),
22 }
23 }
24
25 pub fn register_plugin(&mut self, event_bus: Arc<Mutex<NodiumEvents>>, plugin: Box<dyn NodiuimPlugin>) {
26
27 let plugin_name = plugin.name();
28 let nodes = plugin.nodes(event_bus.clone());
29 let services = plugin.services(event_bus.clone());
30 let windows = plugin.windows(event_bus);
31
32 self.plugins.insert(plugin_name.clone(), plugin);
33
34 for node in nodes {
35 self.nodes.insert(node.name.clone(), node);
36 }
37
38 for service in services {
39 self.services.insert(service.name.clone(), service);
40 }
41
42 for window in windows {
43 self.windows.insert(window.name.clone(), window);
44 }
45 }
46
47 }