pub mod postgres;
use std::collections::HashMap;
pub trait Provider: Send + Sync {
fn name(&self) -> &str;
fn register_resources(&self) {
}
fn register_backends(&self, registry: &mut crate::backends::BackendRegistry);
fn register_test_backends(&self, registry: &mut crate::test_runner::TestBackendRegistry);
}
pub struct ProviderRegistry {
providers: HashMap<String, Box<dyn Provider>>,
}
impl ProviderRegistry {
pub fn new() -> Self {
Self {
providers: HashMap::new(),
}
}
pub fn register(&mut self, provider: Box<dyn Provider>) {
let name = provider.name().to_string();
self.providers.insert(name, provider);
}
pub fn get(&self, name: &str) -> Option<&dyn Provider> {
self.providers.get(name).map(|p| &**p)
}
pub fn list_providers(&self) -> Vec<&str> {
self.providers.keys().map(|s| s.as_str()).collect()
}
}
impl Default for ProviderRegistry {
fn default() -> Self {
Self::new()
}
}
pub fn get_default_provider_registry() -> ProviderRegistry {
let mut registry = ProviderRegistry::new();
registry.register(Box::new(postgres::PostgresProvider::new()));
registry
}