engram-cache 0.1.0

An asynchronous, multi-tier cache backed by Moka and SQLite
Documentation
use std::{any::Any, sync::Arc, time::SystemTime};

use moka::future::Cache;

pub(crate) struct MemoryEntry {
    pub(crate) value: Arc<dyn Any + Send + Sync>,
    pub(crate) type_name: String,
    pub(crate) expires_at: Option<SystemTime>,
    pub(crate) weight: u32,
}

pub(crate) type Memory = Cache<String, Arc<MemoryEntry>>;

pub(crate) fn new(capacity: u64) -> Memory {
    Cache::builder()
        .max_capacity(capacity)
        .weigher(|_, entry: &Arc<MemoryEntry>| entry.weight)
        .build()
}