apikeys_rs/storage/
memory_storage.rs1use std::collections::HashMap;
2
3use async_trait::async_trait;
4
5use crate::{errors::ApiKeyStorageError, traits::ApiKeyStorage, types::ApiKey};
6
7#[derive(Clone, Default)]
8pub struct HashMapStorage {
9 map: HashMap<String, ApiKey>,
10}
11
12impl HashMapStorage {
13 pub fn new() -> Self {
14 Self { map: HashMap::default() }
15 }
16}
17
18#[async_trait]
19impl ApiKeyStorage for HashMapStorage {
20 async fn store_api_key(&mut self, key: &str, value: &ApiKey) -> Result<String, ApiKeyStorageError> {
21 self.map.insert(key.to_string(), value.clone());
22
23 Ok(key.to_string())
24 }
25
26 async fn retrieve_api_key(&self, key: &str) -> Result<ApiKey, ApiKeyStorageError> {
27 match self.map.get(key).cloned() {
28 Some(api_key) => Ok(api_key),
29 None => Err(ApiKeyStorageError::KeyNotFound),
30 }
31 }
32
33 async fn delete_api_key(&mut self, key: &str) -> Result<bool, ApiKeyStorageError> {
34 Ok(self.map.remove(key).is_some())
35 }
36}