use async_trait::async_trait;
use super::entry::MemoryEntry;
use crate::Result;
#[async_trait]
pub trait MemoryStore: Send + Sync {
async fn add(&self, entry: MemoryEntry) -> Result<String>;
async fn search(&self, query: &str, limit: usize) -> Result<Vec<MemoryEntry>>;
async fn search_by_embedding(
&self,
embedding: &[f32],
limit: usize,
threshold: f32,
) -> Result<Vec<MemoryEntry>>;
async fn get(&self, id: &str) -> Result<Option<MemoryEntry>>;
async fn update(&self, entry: MemoryEntry) -> Result<()>;
async fn delete(&self, id: &str) -> Result<()>;
async fn clear(&self) -> Result<()>;
async fn count(&self) -> Result<usize>;
async fn ids(&self) -> Result<Vec<String>>;
}