use std::{collections::HashMap, sync::Arc};
use futures::Future;
use tokio::sync::RwLock;
#[derive(Debug)]
pub struct Cache<TMessage>(Arc<RwLock<HashMap<String, TMessage>>>);
impl<TMessage> Cache<TMessage> {
pub fn new() -> Self {
Self(Arc::new(RwLock::new(HashMap::new())))
}
pub fn read(
&self,
) -> impl Future<Output = tokio::sync::RwLockReadGuard<'_, HashMap<String, TMessage>>> {
self.0.read()
}
pub fn write(
&self,
) -> impl Future<Output = tokio::sync::RwLockWriteGuard<'_, HashMap<String, TMessage>>> {
self.0.write()
}
}
impl<TMessage> Clone for Cache<TMessage> {
fn clone(&self) -> Self {
Self(self.0.clone())
}
}
impl<TMessage> Default for Cache<TMessage> {
fn default() -> Self {
Self::new()
}
}