flare_dht/shard/
hashmap.rs1use std::sync::Arc;
2
3use scc::HashMap;
4use tracing::info;
5
6use crate::error::FlareError;
7
8use super::{ByteEntry, KvShard, ShardFactory, ShardMetadata};
9
10#[allow(dead_code)]
11#[derive(Debug, Clone, Default)]
12pub struct HashMapShard {
13 pub shard_metadata: ShardMetadata,
14 pub map: HashMap<String, ByteEntry>,
15}
16
17#[async_trait::async_trait]
18impl KvShard for HashMapShard {
19 type Key = String;
20 type Entry = ByteEntry;
21
22 fn meta(&self) -> &ShardMetadata {
23 &self.shard_metadata
24 }
25
26 async fn get(&self, key: &String) -> Result<Option<ByteEntry>, FlareError> {
27 let out = self.map.get_async(key).await;
28 let out = out.map(|r| r.clone());
29 Ok(out)
30 }
31
32 async fn set(
52 &self,
53 key: String,
54 value: ByteEntry,
55 ) -> Result<(), FlareError> {
56 self.map.upsert_async(key, value).await;
57 Ok(())
58 }
59
60 async fn delete(&self, key: &String) -> Result<(), FlareError> {
61 self.map.remove_async(key).await;
62 Ok(())
63 }
64}
65
66pub struct HashMapShardFactory {}
67
68impl ShardFactory<HashMapShard> for HashMapShardFactory {
69 fn create_shard(
70 &self,
71 shard_metadata: ShardMetadata,
72 ) -> std::sync::Arc<HashMapShard> {
73 info!("create shard {:?}", &shard_metadata);
74 let shard = HashMapShard {
75 shard_metadata: shard_metadata,
76 ..Default::default()
77 };
78 let shard = Arc::new(shard);
79 shard
80 }
81}