Skip to content

Commit af2864d

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 8c7234c commit af2864d

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
@@ -41,17 +41,59 @@ type CustomRetryPolicy = FilteredRetryPolicy<
4141

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

51-
impl VssStore {
93+
impl VssStoreInner {
5294
pub(crate) fn new(
5395
base_url: String, store_id: String, vss_seed: [u8; 32],
54-
header_provider: Arc<dyn VssHeaderProvider>, runtime: Arc<Runtime>,
96+
header_provider: Arc<dyn VssHeaderProvider>,
5597
) -> Self {
5698
let (data_encryption_key, obfuscation_master_key) =
5799
derive_data_encryption_and_obfuscation_keys(&vss_seed);
@@ -71,7 +113,7 @@ impl VssStore {
71113
}) as _);
72114

73115
let client = VssClient::new_with_headers(base_url, retry_policy, header_provider);
74-
Self { client, store_id, runtime, storable_builder, key_obfuscator }
116+
Self { client, store_id, storable_builder, key_obfuscator }
75117
}
76118

77119
fn build_key(
@@ -229,34 +271,6 @@ impl VssStore {
229271
}
230272
}
231273

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

0 commit comments

Comments
 (0)