1use std::sync::Arc;
11
12use crate::factory::{
13 AuditSinkFactory, CredentialStoreFactory, LifecycleStoreFactory, PolicyStoreFactory, RateLimitCounterFactory,
14 SessionStoreFactory,
15};
16use crate::{
17 AuditSink, CredentialStore, LifecycleStore, PolicyStore, RateLimitCounter, Registry, Result, SessionStore,
18 StorageError,
19};
20
21const BUILTIN_DRIVERS: [&str; 3] = ["memory", "postgres", "redis"];
23
24struct NotImplemented {
30 driver: &'static str,
31}
32
33impl NotImplemented {
34 fn unimplemented<T>(&self) -> Result<T> {
35 Err(StorageError::Backend(format!(
36 "storage driver {:?} is not implemented yet (ships in Epic B)",
37 self.driver
38 )))
39 }
40}
41
42impl PolicyStoreFactory for NotImplemented {
43 fn build(&self, _config: &toml::Value) -> Result<Arc<dyn PolicyStore>> {
44 self.unimplemented()
45 }
46}
47
48impl AuditSinkFactory for NotImplemented {
49 fn build(&self, _config: &toml::Value) -> Result<Arc<dyn AuditSink>> {
50 self.unimplemented()
51 }
52}
53
54impl SessionStoreFactory for NotImplemented {
55 fn build(&self, _config: &toml::Value) -> Result<Arc<dyn SessionStore>> {
56 self.unimplemented()
57 }
58}
59
60impl CredentialStoreFactory for NotImplemented {
61 fn build(&self, _config: &toml::Value) -> Result<Arc<dyn CredentialStore>> {
62 self.unimplemented()
63 }
64}
65
66impl RateLimitCounterFactory for NotImplemented {
67 fn build(&self, _config: &toml::Value) -> Result<Arc<dyn RateLimitCounter>> {
68 self.unimplemented()
69 }
70}
71
72impl LifecycleStoreFactory for NotImplemented {
73 fn build(&self, _config: &toml::Value) -> Result<Arc<dyn LifecycleStore>> {
74 self.unimplemented()
75 }
76}
77
78pub fn register_builtin_drivers(registry: &mut Registry) {
85 for driver in BUILTIN_DRIVERS {
86 registry.register_policy_store(driver, Box::new(NotImplemented { driver }));
87 registry.register_audit_sink(driver, Box::new(NotImplemented { driver }));
88 registry.register_session_store(driver, Box::new(NotImplemented { driver }));
89 registry.register_credential_store(driver, Box::new(NotImplemented { driver }));
90 registry.register_rate_limit_counter(driver, Box::new(NotImplemented { driver }));
91 registry.register_lifecycle_store(driver, Box::new(NotImplemented { driver }));
92 }
93}