doido-cache 0.1.0

Named cache stores, TTL — memory/Redis/Memcached backends in ActiveSupport::Cache fashion for Doido.
Documentation
use doido_cache::{CacheRegistry, MemoryStore};
use serde_json::json;
use std::sync::Arc;

#[tokio::test]
async fn test_registry_add_and_retrieve() {
    let mut reg = CacheRegistry::new();
    reg.add("default", Arc::new(MemoryStore::new()));
    let store = reg.store("default").unwrap();
    store.set("k", json!(42), None).await.unwrap();
    assert_eq!(store.get("k").await.unwrap(), Some(json!(42)));
}

#[test]
fn test_registry_missing_store_returns_none() {
    let reg = CacheRegistry::new();
    assert!(reg.store("nonexistent").is_none());
}

#[test]
fn test_registry_default_is_empty() {
    let reg = CacheRegistry::default();
    assert!(reg.store("any").is_none());
}

#[tokio::test]
async fn test_registry_holds_multiple_named_stores() {
    let mut reg = CacheRegistry::new();
    reg.add("cache", Arc::new(MemoryStore::new()));
    reg.add("sessions", Arc::new(MemoryStore::new()));

    reg.store("cache")
        .unwrap()
        .set("k", json!(1), None)
        .await
        .unwrap();
    reg.store("sessions")
        .unwrap()
        .set("k", json!(2), None)
        .await
        .unwrap();

    assert_eq!(
        reg.store("cache").unwrap().get("k").await.unwrap(),
        Some(json!(1))
    );
    assert_eq!(
        reg.store("sessions").unwrap().get("k").await.unwrap(),
        Some(json!(2))
    );
}