#[async_trait]
pub trait MemoryProvider: Send + Sync {
async fn store(&self, key: &str, value: Value) -> Result<(), MemoryError>;
async fn store_entry(&self, entry: MemoryEntry) -> Result<(), MemoryError>;
async fn retrieve(&self, key: &str) -> Result<Option<Value>, MemoryError>;
async fn retrieve_entry(&self, key: &str) -> Result<Option<MemoryEntry>, MemoryError>;
async fn query(&self, query: &MemoryQuery) -> Result<Vec<MemoryEntry>, MemoryError>;
async fn delete(&self, key: &str) -> Result<(), MemoryError>;
async fn exists(&self, key: &str) -> Result<bool, MemoryError>;
fn backend_type(&self) -> BackendType;
fn capabilities(&self) -> MemoryCapabilities;
async fn ping(&self) -> Result<bool, MemoryError>;
}