breez_sdk_liquid/wallet/
persister.rs1use anyhow::Result;
2use lwk_wollet::{BoxError, DynStore};
3use std::fmt;
4use std::sync::Arc;
5
6pub use lwk_wollet;
7
8use crate::persist::Persister;
9
10pub type LwkPersister = Arc<dyn DynStore>;
11
12#[sdk_macros::async_trait]
13pub trait WalletCachePersister: Send + Sync {
14 fn get_lwk_persister(&self) -> Result<LwkPersister>;
15
16 async fn clear_cache(&self) -> Result<()>;
17}
18
19#[derive(Clone)]
20pub struct SqliteWalletCachePersister {
21 persister: Arc<Persister>,
22}
23
24impl SqliteWalletCachePersister {
25 pub fn new(persister: Arc<Persister>) -> Result<Self> {
26 Ok(Self { persister })
27 }
28}
29
30#[sdk_macros::async_trait]
31impl WalletCachePersister for SqliteWalletCachePersister {
32 fn get_lwk_persister(&self) -> Result<LwkPersister> {
33 Ok(Arc::new(SqliteDynStore {
34 persister: Arc::clone(&self.persister),
35 }))
36 }
37
38 async fn clear_cache(&self) -> Result<()> {
39 self.persister.clear_wallet_cache()
40 }
41}
42
43struct SqliteDynStore {
48 persister: Arc<Persister>,
49}
50
51impl fmt::Debug for SqliteDynStore {
52 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
53 f.debug_struct("SqliteDynStore").finish()
54 }
55}
56
57impl DynStore for SqliteDynStore {
58 fn get(&self, key: &str) -> Result<Option<Vec<u8>>, BoxError> {
59 self.persister
60 .get_wallet_cache(key)
61 .map_err(|e| e.to_string().into())
62 }
63
64 fn put(&self, key: &str, value: &[u8]) -> Result<(), BoxError> {
65 self.persister
66 .set_wallet_cache(key, value)
67 .map_err(|e| e.to_string().into())
68 }
69
70 fn remove(&self, key: &str) -> Result<(), BoxError> {
71 self.persister
72 .remove_wallet_cache(key)
73 .map_err(|e| e.to_string().into())
74 }
75
76 fn is_persisted(&self) -> bool {
79 true
80 }
81}