1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#![allow(dead_code)]
use std::collections::HashMap;
use std::sync::RwLock;
lazy_static!{
pub static ref KEY_STORE: LocalStore = LocalStore::new();
}
pub struct LocalStore {
store: RwLock<HashMap<String, Vec<u8>>>,
}
pub trait Store {
fn insert(&self, key_id: String, key: &[u8]);
fn get_key(&self, id: &str) -> Option<Vec<u8>>;
}
impl LocalStore {
fn new() -> Self {
Self { store: RwLock::new(HashMap::new()) }
}
}
impl Store for LocalStore {
fn insert(&self, key_id: String, key: &[u8]) {
let _ = self.store
.write()
.expect("could not get write on key store")
.insert(key_id, key.to_vec());
}
fn get_key(&self, id: &str) -> Option<Vec<u8>> {
if let Some(v) = self.store.read().expect("could not get read lock on key store").get(id) {
Some(v.clone())
} else {
None
}
}
}