nodium_plugins/
registry.rs

1// libs/plugins/src/plugin_manager.rs
2
3use 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    // Add other methods to access and manipulate the registered plugins, nodes, and services
48}