zebflow 0.10.10

Reactive web automation platform — pipelines, templates, and real-time collaboration in a single binary.
Documentation
use std::collections::BTreeMap;
use std::sync::Arc;

use super::driver::DbDriver;
use super::drivers::{MysqlDbDriver, PostgresqlDbDriver, SekejapDbDriver, SqliteDbDriver};

/// Registry of DB runtime drivers keyed by normalized database kind.
#[derive(Clone, Default)]
pub struct DbDriverRegistry {
    drivers: BTreeMap<String, Arc<dyn DbDriver>>,
}

impl DbDriverRegistry {
    /// Builds the default registry used by platform runtime.
    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
    }

    /// Registers or replaces one driver.
    pub fn register(&mut self, driver: Arc<dyn DbDriver>) {
        self.drivers.insert(driver.kind().to_string(), driver);
    }

    /// Resolves one driver by database kind.
    pub fn get(&self, database_kind: &str) -> Option<Arc<dyn DbDriver>> {
        self.drivers.get(database_kind).cloned()
    }
}