use async_trait::async_trait;
use crate::error::Result;
use crate::types::{MemoryEntry, MemoryResult, StoredEntry};
#[async_trait]
pub trait MemoryStore: Send + Sync {
async fn add(&self, entries: Vec<MemoryEntry>) -> Result<Vec<String>>;
async fn search(
&self,
query: &str,
limit: usize,
metadata_filter: Option<&serde_json::Value>,
) -> Result<Vec<MemoryResult>>;
async fn search_local(
&self,
query: &str,
limit: usize,
metadata_filter: Option<&serde_json::Value>,
) -> Result<Vec<MemoryResult>>;
async fn get(&self, id: &str) -> Result<Option<StoredEntry>>;
async fn delete(&self, id: &str) -> Result<bool>;
async fn len(&self) -> Result<usize>;
async fn is_empty(&self) -> Result<bool> {
Ok(self.len().await? == 0)
}
}
#[async_trait]
pub trait MemoryBackend: Send + Sync {
async fn put(&self, entry: StoredEntry) -> Result<()>;
async fn get(&self, id: &str) -> Result<Option<StoredEntry>>;
async fn delete(&self, id: &str) -> Result<bool>;
async fn list(&self) -> Result<Vec<StoredEntry>>;
async fn len(&self) -> Result<usize>;
async fn is_empty(&self) -> Result<bool> {
Ok(self.len().await? == 0)
}
async fn search_by_bands(&self, bands: &[String], limit: usize) -> Result<Vec<StoredEntry>>;
}