millipede_core/storage/
handle.rs1use std::{fmt, sync::Arc};
2
3use super::{Dataset, KeyValueStore, RequestQueue, StorageClient, StorageResult};
4
5#[derive(Clone)]
16pub struct StorageHandle {
17 client: Arc<dyn StorageClient>,
18 dataset: Arc<dyn Dataset>,
19 key_value_store: Arc<dyn KeyValueStore>,
20 request_queue: Arc<dyn RequestQueue>,
21}
22
23impl StorageHandle {
24 pub fn new(
26 client: Arc<dyn StorageClient>,
27 dataset: Arc<dyn Dataset>,
28 key_value_store: Arc<dyn KeyValueStore>,
29 request_queue: Arc<dyn RequestQueue>,
30 ) -> Self {
31 Self {
32 client,
33 dataset,
34 key_value_store,
35 request_queue,
36 }
37 }
38
39 pub fn dataset(&self) -> &Arc<dyn Dataset> {
41 &self.dataset
42 }
43
44 pub fn key_value_store(&self) -> &Arc<dyn KeyValueStore> {
46 &self.key_value_store
47 }
48
49 pub fn request_queue(&self) -> &Arc<dyn RequestQueue> {
51 &self.request_queue
52 }
53
54 pub async fn dataset_named(&self, name: &str) -> StorageResult<Arc<dyn Dataset>> {
56 self.client.open_dataset(Some(name)).await
57 }
58
59 pub async fn kvs_named(&self, name: &str) -> StorageResult<Arc<dyn KeyValueStore>> {
61 self.client.open_key_value_store(Some(name)).await
62 }
63
64 pub fn client(&self) -> &Arc<dyn StorageClient> {
66 &self.client
67 }
68}
69
70impl fmt::Debug for StorageHandle {
71 fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
72 formatter
73 .debug_struct("StorageHandle")
74 .field("client", &"<dyn StorageClient>")
75 .field("dataset", &"<dyn Dataset>")
76 .field("key_value_store", &"<dyn KeyValueStore>")
77 .field("request_queue", &"<dyn RequestQueue>")
78 .finish()
79 }
80}