use std::collections::HashMap;
use std::sync::Arc;
use super::interface::PipelineEngine;
#[derive(Clone, Default)]
pub struct PipelineEngineRegistry {
engines: HashMap<String, Arc<dyn PipelineEngine>>,
}
impl PipelineEngineRegistry {
pub fn new() -> Self {
Self {
engines: HashMap::new(),
}
}
pub fn register(&mut self, engine: Arc<dyn PipelineEngine>) {
self.engines.insert(engine.id().to_string(), engine);
}
pub fn get(&self, id: &str) -> Option<Arc<dyn PipelineEngine>> {
self.engines.get(id).map(Arc::clone)
}
pub fn ids(&self) -> Vec<String> {
let mut ids: Vec<String> = self.engines.keys().cloned().collect();
ids.sort();
ids
}
}