1use parking_lot::RwLock;
2use std::collections::HashMap;
3use std::hash::Hash;
4use std::sync::Arc;
5
6#[derive(Default)]
8pub struct KeyedStateBackend<K, V> {
9 state: Arc<RwLock<HashMap<K, V>>>,
10}
11
12impl<K, V> KeyedStateBackend<K, V>
13where
14 K: Eq + Hash,
15{
16 pub fn new() -> Self {
17 Self {
18 state: Arc::new(RwLock::new(HashMap::new())),
19 }
20 }
21
22 pub fn get(&self, key: &K) -> Option<V>
23 where
24 V: Clone,
25 {
26 self.state.read().get(key).cloned()
27 }
28
29 pub fn set(&self, key: K, value: V) {
30 self.state.write().insert(key, value);
31 }
32}