Skip to main content

surfpool_core/storage/
fifo_map.rs

1use std::hash::Hash;
2
3use serde::{Deserialize, Serialize};
4use surfpool_types::FifoMap;
5
6impl<K, V> super::Storage<K, V> for FifoMap<K, V>
7where
8    K: Serialize + for<'de> Deserialize<'de> + Clone + Send + Sync + 'static + std::cmp::Eq + Hash,
9    V: Serialize + for<'de> Deserialize<'de> + Clone + Send + Sync + 'static,
10{
11    fn store(&mut self, key: K, value: V) -> super::StorageResult<()> {
12        self.insert(key, value);
13        Ok(())
14    }
15
16    fn clear(&mut self) -> super::StorageResult<()> {
17        self.clear();
18        Ok(())
19    }
20
21    fn get(&self, key: &K) -> super::StorageResult<Option<V>> {
22        Ok(self.get(key).cloned())
23    }
24
25    fn take(&mut self, key: &K) -> super::StorageResult<Option<V>> {
26        Ok(self.remove(key))
27    }
28
29    fn keys(&self) -> super::StorageResult<Vec<K>> {
30        Ok(self.iter().map(|(k, _)| k.clone()).collect())
31    }
32
33    fn into_iter(&self) -> super::StorageResult<Box<dyn Iterator<Item = (K, V)> + '_>> {
34        Ok(Box::new(self.iter().map(|(k, v)| (k.clone(), v.clone()))))
35    }
36
37    fn clone_box(&self) -> Box<dyn super::Storage<K, V>> {
38        Box::new(self.clone())
39    }
40
41    fn contains_key(&self, key: &K) -> super::StorageResult<bool> {
42        Ok(self.contains_key(key))
43    }
44
45    fn count(&self) -> super::StorageResult<u64> {
46        Ok(self.len() as u64)
47    }
48}