use quick_cache::{DefaultHashBuilder, UnitWeighter, Weighter}; use std::{ future::Future, hash::{BuildHasher, Hash}, time::Duration, }; use crate::{KQCacheWithTTL, PlaceholderGuardWithTTL}; pub struct CacheWithTTL(KQCacheWithTTL); impl CacheWithTTL { pub async fn new_with_unit_weights(estimated_items_capacity: usize, ttl: Duration) -> Self { Self::new( estimated_items_capacity, estimated_items_capacity as u64, UnitWeighter, DefaultHashBuilder::default(), ttl, ) .await } } impl< Key: Eq + Hash + Clone + Send + Sync + 'static, Val: Clone + Send + Sync + 'static, We: Weighter + Clone + Send + Sync + 'static, B: BuildHasher + Clone + Send + Sync + 'static, > CacheWithTTL { pub async fn new( estimated_items_capacity: usize, weight_capacity: u64, weighter: We, hash_builder: B, ttl: Duration, ) -> Self { let inner = KQCacheWithTTL::new( estimated_items_capacity, weight_capacity, weighter, hash_builder, ttl, ) .await; Self(inner) } #[inline] pub async fn get_or_insert_async(&self, key: &Key, f: Fut) -> Result where Fut: Future>, { self.0.get_or_insert_async(key, &(), f).await } #[inline] pub async fn get_value_or_guard_async( &self, key: Key, ) -> Result> { self.0.get_value_or_guard_async(key, ()).await } #[inline] pub fn insert(&self, key: Key, val: Val) { self.0.insert(key, (), val) } #[inline] pub fn remove(&self, key: &Key) -> bool { self.0.remove(key, &()) } }