reddb_server/storage/query/engine/registry/
query_registry_impl.rs1use super::*;
2
3impl QueryEngineRegistry {
4 pub fn new() -> Self {
6 Self {
7 factories: HashMap::new(),
8 default_engine: None,
9 }
10 }
11
12 pub fn with_default() -> Self {
14 let mut registry = Self::new();
15 registry.register(Box::new(InMemoryEngineFactory));
16 registry.set_default("memory");
17 registry
18 }
19
20 pub fn register(&mut self, factory: Box<dyn QueryEngineFactory>) {
22 let name = factory.name().to_string();
23 self.factories.insert(name, factory);
24 }
25
26 pub fn set_default(&mut self, name: &str) {
28 self.default_engine = Some(name.to_string());
29 }
30
31 pub fn get(&self, name: &str) -> Option<Box<dyn QueryEngine>> {
33 self.factories.get(name).map(|f| f.create())
34 }
35
36 pub fn get_default(&self) -> Option<Box<dyn QueryEngine>> {
38 self.default_engine.as_ref().and_then(|name| self.get(name))
39 }
40
41 pub fn list(&self) -> Vec<&str> {
43 self.factories.keys().map(|s| s.as_str()).collect()
44 }
45}