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
use super::{TokenStore, TokenStoreInternalError}; use async_trait::async_trait; use houseflow_types::token::{Token, TokenID}; use std::{collections::HashMap, sync::Arc}; use tokio::sync::Mutex; #[derive(Debug, thiserror::Error)] pub enum Error {} impl TokenStoreInternalError for Error {} #[derive(Clone, Default)] pub struct MemoryTokenStore { store: Arc<Mutex<HashMap<TokenID, Token>>>, } impl MemoryTokenStore { pub fn new() -> Self { Default::default() } } #[async_trait] impl TokenStore for MemoryTokenStore { async fn exists(&self, id: &TokenID) -> Result<bool, super::Error> { Ok(self.store.lock().await.contains_key(id)) } async fn get(&self, id: &TokenID) -> Result<Option<Token>, super::Error> { Ok(self.store.lock().await.get(id).cloned()) } async fn add(&self, token: &Token) -> Result<(), super::Error> { self.store .lock() .await .insert(token.id().clone(), token.clone()); Ok(()) } async fn remove(&self, id: &TokenID) -> Result<bool, super::Error> { Ok(self.store.lock().await.remove(id).is_some()) } }