Skip to main content

aa_storage_memory/
factory.rs

1//! Factories that build the in-memory backends for the `aa-storage` driver
2//! registry.
3//!
4//! The memory driver needs no connection settings, so every factory ignores its
5//! `[storage.memory]` TOML subsection and returns a fresh, empty store. They are
6//! registered under the driver name `"memory"` by [`crate::register`].
7
8use std::sync::Arc;
9
10use aa_storage::factory::{
11    AuditSinkFactory, CredentialStoreFactory, LifecycleStoreFactory, PolicyStoreFactory, RateLimitCounterFactory,
12    SessionStoreFactory,
13};
14use aa_storage::{AuditSink, CredentialStore, LifecycleStore, PolicyStore, RateLimitCounter, Result, SessionStore};
15
16use crate::{
17    MemoryAuditSink, MemoryCredentialStore, MemoryLifecycleStore, MemoryPolicyStore, MemoryRateLimitCounter,
18    MemorySessionStore,
19};
20
21/// Builds a [`MemoryPolicyStore`](crate::MemoryPolicyStore).
22#[derive(Debug, Default, Clone, Copy)]
23pub struct MemoryPolicyStoreFactory;
24
25impl PolicyStoreFactory for MemoryPolicyStoreFactory {
26    fn build(&self, _config: &toml::Value) -> Result<Arc<dyn PolicyStore>> {
27        Ok(Arc::new(MemoryPolicyStore::new()))
28    }
29}
30
31/// Builds a [`MemoryAuditSink`](crate::MemoryAuditSink).
32#[derive(Debug, Default, Clone, Copy)]
33pub struct MemoryAuditSinkFactory;
34
35impl AuditSinkFactory for MemoryAuditSinkFactory {
36    fn build(&self, _config: &toml::Value) -> Result<Arc<dyn AuditSink>> {
37        Ok(Arc::new(MemoryAuditSink::new()))
38    }
39}
40
41/// Builds a [`MemorySessionStore`](crate::MemorySessionStore).
42#[derive(Debug, Default, Clone, Copy)]
43pub struct MemorySessionStoreFactory;
44
45impl SessionStoreFactory for MemorySessionStoreFactory {
46    fn build(&self, _config: &toml::Value) -> Result<Arc<dyn SessionStore>> {
47        Ok(Arc::new(MemorySessionStore::new()))
48    }
49}
50
51/// Builds a [`MemoryCredentialStore`](crate::MemoryCredentialStore).
52#[derive(Debug, Default, Clone, Copy)]
53pub struct MemoryCredentialStoreFactory;
54
55impl CredentialStoreFactory for MemoryCredentialStoreFactory {
56    fn build(&self, _config: &toml::Value) -> Result<Arc<dyn CredentialStore>> {
57        Ok(Arc::new(MemoryCredentialStore::new()))
58    }
59}
60
61/// Builds a [`MemoryRateLimitCounter`](crate::MemoryRateLimitCounter).
62#[derive(Debug, Default, Clone, Copy)]
63pub struct MemoryRateLimitCounterFactory;
64
65impl RateLimitCounterFactory for MemoryRateLimitCounterFactory {
66    fn build(&self, _config: &toml::Value) -> Result<Arc<dyn RateLimitCounter>> {
67        Ok(Arc::new(MemoryRateLimitCounter::new()))
68    }
69}
70
71/// Builds a [`MemoryLifecycleStore`](crate::MemoryLifecycleStore).
72#[derive(Debug, Default, Clone, Copy)]
73pub struct MemoryLifecycleStoreFactory;
74
75impl LifecycleStoreFactory for MemoryLifecycleStoreFactory {
76    fn build(&self, _config: &toml::Value) -> Result<Arc<dyn LifecycleStore>> {
77        Ok(Arc::new(MemoryLifecycleStore::new()))
78    }
79}