use std::sync::Arc;
use crate::factory::{
AuditSinkFactory, CredentialStoreFactory, LifecycleStoreFactory, PolicyStoreFactory, RateLimitCounterFactory,
SessionStoreFactory,
};
use crate::{
AuditSink, CredentialStore, LifecycleStore, PolicyStore, RateLimitCounter, Registry, Result, SessionStore,
StorageError,
};
const BUILTIN_DRIVERS: [&str; 3] = ["memory", "postgres", "redis"];
struct NotImplemented {
driver: &'static str,
}
impl NotImplemented {
fn unimplemented<T>(&self) -> Result<T> {
Err(StorageError::Backend(format!(
"storage driver {:?} is not implemented yet (ships in Epic B)",
self.driver
)))
}
}
impl PolicyStoreFactory for NotImplemented {
fn build(&self, _config: &toml::Value) -> Result<Arc<dyn PolicyStore>> {
self.unimplemented()
}
}
impl AuditSinkFactory for NotImplemented {
fn build(&self, _config: &toml::Value) -> Result<Arc<dyn AuditSink>> {
self.unimplemented()
}
}
impl SessionStoreFactory for NotImplemented {
fn build(&self, _config: &toml::Value) -> Result<Arc<dyn SessionStore>> {
self.unimplemented()
}
}
impl CredentialStoreFactory for NotImplemented {
fn build(&self, _config: &toml::Value) -> Result<Arc<dyn CredentialStore>> {
self.unimplemented()
}
}
impl RateLimitCounterFactory for NotImplemented {
fn build(&self, _config: &toml::Value) -> Result<Arc<dyn RateLimitCounter>> {
self.unimplemented()
}
}
impl LifecycleStoreFactory for NotImplemented {
fn build(&self, _config: &toml::Value) -> Result<Arc<dyn LifecycleStore>> {
self.unimplemented()
}
}
pub fn register_builtin_drivers(registry: &mut Registry) {
for driver in BUILTIN_DRIVERS {
registry.register_policy_store(driver, Box::new(NotImplemented { driver }));
registry.register_audit_sink(driver, Box::new(NotImplemented { driver }));
registry.register_session_store(driver, Box::new(NotImplemented { driver }));
registry.register_credential_store(driver, Box::new(NotImplemented { driver }));
registry.register_rate_limit_counter(driver, Box::new(NotImplemented { driver }));
registry.register_lifecycle_store(driver, Box::new(NotImplemented { driver }));
}
}