use std::collections::BTreeMap;
use std::sync::Arc;
use super::driver::DbDriver;
use super::drivers::{MysqlDbDriver, PostgresqlDbDriver, SekejapDbDriver, SqliteDbDriver};
#[derive(Clone, Default)]
pub struct DbDriverRegistry {
drivers: BTreeMap<String, Arc<dyn DbDriver>>,
}
impl DbDriverRegistry {
pub fn with_defaults() -> Self {
let mut out = Self::default();
out.register(Arc::new(PostgresqlDbDriver::default()));
out.register(Arc::new(SekejapDbDriver));
out.register(Arc::new(SqliteDbDriver::default()));
out.register(Arc::new(MysqlDbDriver::default()));
out
}
pub fn register(&mut self, driver: Arc<dyn DbDriver>) {
self.drivers.insert(driver.kind().to_string(), driver);
}
pub fn get(&self, database_kind: &str) -> Option<Arc<dyn DbDriver>> {
self.drivers.get(database_kind).cloned()
}
}