use std::any::Any;
use crate::engine::TemplateModel;
use crate::util::Utf16String;
use super::{ExpressionCacheKey, ICache, TemplateCacheKey};
pub trait ICacheManager: Send + Sync {
fn class_name(&self) -> &'static str {
std::any::type_name::<Self>()
}
fn get_template_cache(&self) -> Option<&dyn ICache<TemplateCacheKey, TemplateModel>>;
fn get_expression_cache(
&self,
) -> Option<&dyn ICache<ExpressionCacheKey, dyn Any + Send + Sync>>;
fn get_specific_cache<K, V>(&self, name: &Utf16String) -> Option<&dyn ICache<K, V>>
where
Self: Sized,
K: Clone + Eq + std::hash::Hash + Send + Sync,
V: Send + Sync;
fn get_all_specific_cache_names(&self) -> Option<Vec<Utf16String>>;
fn clear_all_caches(&self);
}