Skip to content

Commit 0686ece

Browse files
committed
Split VssStore into VssStore and VssStoreInner
.. where the former holds the latter in an `Arc` that can be used in async/`Future` contexts more easily.
1 parent 8d26c63 commit 0686ece

File tree

1 file changed

+46
-32
lines changed

1 file changed

+46
-32
lines changed

src/io/vss_store.rs

Lines changed: 46 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -40,17 +40,59 @@ type CustomRetryPolicy = FilteredRetryPolicy<
4040

4141
/// A [`KVStoreSync`] implementation that writes to and reads from a [VSS](https://github.com/lightningdevkit/vss-server/blob/main/README.md) backend.
4242
pub struct VssStore {
43+
inner: Arc<VssStoreInner>,
44+
runtime: Arc<Runtime>,
45+
}
46+
47+
impl VssStore {
48+
pub(crate) fn new(
49+
base_url: String, store_id: String, vss_seed: [u8; 32],
50+
header_provider: Arc<dyn VssHeaderProvider>, runtime: Arc<Runtime>,
51+
) -> Self {
52+
let inner = Arc::new(VssStoreInner::new(base_url, store_id, vss_seed, header_provider));
53+
Self { inner, runtime }
54+
}
55+
}
56+
57+
impl KVStoreSync for VssStore {
58+
fn read(
59+
&self, primary_namespace: &str, secondary_namespace: &str, key: &str,
60+
) -> io::Result<Vec<u8>> {
61+
let fut = self.inner.read_internal(primary_namespace, secondary_namespace, key);
62+
self.runtime.block_on(fut)
63+
}
64+
65+
fn write(
66+
&self, primary_namespace: &str, secondary_namespace: &str, key: &str, buf: Vec<u8>,
67+
) -> io::Result<()> {
68+
let fut = self.inner.write_internal(primary_namespace, secondary_namespace, key, buf);
69+
self.runtime.block_on(fut)
70+
}
71+
72+
fn remove(
73+
&self, primary_namespace: &str, secondary_namespace: &str, key: &str, lazy: bool,
74+
) -> io::Result<()> {
75+
let fut = self.inner.remove_internal(primary_namespace, secondary_namespace, key, lazy);
76+
self.runtime.block_on(fut)
77+
}
78+
79+
fn list(&self, primary_namespace: &str, secondary_namespace: &str) -> io::Result<Vec<String>> {
80+
let fut = self.inner.list_internal(primary_namespace, secondary_namespace);
81+
self.runtime.block_on(fut)
82+
}
83+
}
84+
85+
struct VssStoreInner {
4386
client: VssClient<CustomRetryPolicy>,
4487
store_id: String,
45-
runtime: Arc<Runtime>,
4688
storable_builder: StorableBuilder<RandEntropySource>,
4789
key_obfuscator: KeyObfuscator,
4890
}
4991

50-
impl VssStore {
92+
impl VssStoreInner {
5193
pub(crate) fn new(
5294
base_url: String, store_id: String, vss_seed: [u8; 32],
53-
header_provider: Arc<dyn VssHeaderProvider>, runtime: Arc<Runtime>,
95+
header_provider: Arc<dyn VssHeaderProvider>,
5496
) -> Self {
5597
let (data_encryption_key, obfuscation_master_key) =
5698
derive_data_encryption_and_obfuscation_keys(&vss_seed);
@@ -70,7 +112,7 @@ impl VssStore {
70112
}) as _);
71113

72114
let client = VssClient::new_with_headers(base_url, retry_policy, header_provider);
73-
Self { client, store_id, runtime, storable_builder, key_obfuscator }
115+
Self { client, store_id, storable_builder, key_obfuscator }
74116
}
75117

76118
fn build_key(
@@ -228,34 +270,6 @@ impl VssStore {
228270
}
229271
}
230272

231-
impl KVStoreSync for VssStore {
232-
fn read(
233-
&self, primary_namespace: &str, secondary_namespace: &str, key: &str,
234-
) -> io::Result<Vec<u8>> {
235-
let fut = self.read_internal(primary_namespace, secondary_namespace, key);
236-
self.runtime.block_on(fut)
237-
}
238-
239-
fn write(
240-
&self, primary_namespace: &str, secondary_namespace: &str, key: &str, buf: Vec<u8>,
241-
) -> io::Result<()> {
242-
let fut = self.write_internal(primary_namespace, secondary_namespace, key, buf);
243-
self.runtime.block_on(fut)
244-
}
245-
246-
fn remove(
247-
&self, primary_namespace: &str, secondary_namespace: &str, key: &str, lazy: bool,
248-
) -> io::Result<()> {
249-
let fut = self.remove_internal(primary_namespace, secondary_namespace, key, lazy);
250-
self.runtime.block_on(fut)
251-
}
252-
253-
fn list(&self, primary_namespace: &str, secondary_namespace: &str) -> io::Result<Vec<String>> {
254-
let fut = self.list_internal(primary_namespace, secondary_namespace);
255-
self.runtime.block_on(fut)
256-
}
257-
}
258-
259273
fn derive_data_encryption_and_obfuscation_keys(vss_seed: &[u8; 32]) -> ([u8; 32], [u8; 32]) {
260274
let hkdf = |initial_key_material: &[u8], salt: &[u8]| -> [u8; 32] {
261275
let mut engine = HmacEngine::<sha256::Hash>::new(salt);

0 commit comments

Comments
 (0)