use super::*;
impl QueryEngineRegistry {
pub fn new() -> Self {
Self {
factories: HashMap::new(),
default_engine: None,
}
}
pub fn with_default() -> Self {
let mut registry = Self::new();
registry.register(Box::new(InMemoryEngineFactory));
registry.set_default("memory");
registry
}
pub fn register(&mut self, factory: Box<dyn QueryEngineFactory>) {
let name = factory.name().to_string();
self.factories.insert(name, factory);
}
pub fn set_default(&mut self, name: &str) {
self.default_engine = Some(name.to_string());
}
pub fn get(&self, name: &str) -> Option<Box<dyn QueryEngine>> {
self.factories.get(name).map(|f| f.create())
}
pub fn get_default(&self) -> Option<Box<dyn QueryEngine>> {
self.default_engine.as_ref().and_then(|name| self.get(name))
}
pub fn list(&self) -> Vec<&str> {
self.factories.keys().map(|s| s.as_str()).collect()
}
}