use std::collections::HashMap;
use std::sync::Arc;
use super::interface::AutomatonEngine;
#[derive(Clone, Default)]
pub struct AutomatonEngineRegistry {
engines: HashMap<String, Arc<dyn AutomatonEngine>>,
}
impl AutomatonEngineRegistry {
pub fn new() -> Self {
Self {
engines: HashMap::new(),
}
}
pub fn register(&mut self, engine: Arc<dyn AutomatonEngine>) {
self.engines.insert(engine.id().to_string(), engine);
}
pub fn get(&self, id: &str) -> Option<Arc<dyn AutomatonEngine>> {
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
}
}