use crate::plugins::traits::SecurityPlugin;
use std::collections::HashMap;
use std::sync::Arc;
pub struct PluginRegistry {
plugins: HashMap<String, Arc<dyn SecurityPlugin>>,
}
impl PluginRegistry {
pub fn new() -> Self {
Self {
plugins: HashMap::new(),
}
}
pub fn register(&mut self, plugin: Arc<dyn SecurityPlugin>) {
self.plugins.insert(plugin.name().to_string(), plugin);
}
pub fn get(&self, name: &str) -> Option<Arc<dyn SecurityPlugin>> {
self.plugins.get(name).cloned()
}
pub fn list(&self) -> Vec<String> {
self.plugins.keys().cloned().collect()
}
pub fn enabled_plugins(&self, enabled: &[String]) -> Vec<Arc<dyn SecurityPlugin>> {
enabled.iter().filter_map(|name| self.get(name)).collect()
}
}
impl Default for PluginRegistry {
fn default() -> Self {
Self::new()
}
}