#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct CacheEntry {
pub html: String,
pub headers: Vec<(String, String)>,
pub etag: String,
pub tags: Vec<String>,
pub created_at_ms: u64,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum CacheLookupStatus {
Hit,
Stale,
Miss,
}
pub trait CacheBackend: Send + Sync {
fn name(&self) -> &str;
fn get(&self, key: &str) -> Result<Option<CacheEntry>, String>;
fn set(&self, key: &str, entry: CacheEntry, ttl_ms: Option<u64>) -> Result<(), String>;
fn delete(&self, key: &str) -> Result<bool, String>;
fn invalidate_tag(&self, tag: &str) -> Result<u32, String>;
fn invalidate_path(&self, pattern: &str) -> Result<u32, String>;
fn is_healthy(&self) -> bool {
true
}
}