Skip to main content

breez_sdk_spark/persist/backend/
prebuilt.rs

1//! Backend over caller-supplied store implementations.
2
3use std::sync::Arc;
4
5use macros::async_trait;
6use spark_wallet::{SessionStore, TokenOutputStore, TreeStore};
7
8use crate::{Network, SdkError, persist::Storage};
9
10use super::{ResolvedStores, StorageBackend};
11
12/// A [`StorageBackend`] over caller-supplied store implementations.
13///
14/// `create_stores` returns the stores as-is — `network` and `identity` are
15/// ignored, so the caller is responsible for any tenant scoping.
16pub struct PrebuiltBackend {
17    storage: Arc<dyn Storage>,
18    tree_store: Option<Arc<dyn TreeStore>>,
19    token_output_store: Option<Arc<dyn TokenOutputStore>>,
20    session_store: Option<Arc<dyn SessionStore>>,
21}
22
23impl PrebuiltBackend {
24    /// Builds a backend from a caller-supplied [`Storage`] and, optionally, a
25    /// tree, token-output and session store. Stores left `None` fall back to
26    /// the in-memory defaults.
27    #[must_use]
28    pub fn new(
29        storage: Arc<dyn Storage>,
30        tree_store: Option<Arc<dyn TreeStore>>,
31        token_output_store: Option<Arc<dyn TokenOutputStore>>,
32        session_store: Option<Arc<dyn SessionStore>>,
33    ) -> Self {
34        Self {
35            storage,
36            tree_store,
37            token_output_store,
38            session_store,
39        }
40    }
41}
42
43#[async_trait]
44impl StorageBackend for PrebuiltBackend {
45    async fn create_stores(
46        &self,
47        _network: Network,
48        _identity: Vec<u8>,
49    ) -> Result<Arc<ResolvedStores>, SdkError> {
50        Ok(Arc::new(ResolvedStores {
51            storage: self.storage.clone(),
52            tree_store: self.tree_store.clone(),
53            token_output_store: self.token_output_store.clone(),
54            session_store: self.session_store.clone(),
55        }))
56    }
57}