use async_trait::async_trait;
use super::entity::{Entity, EntityType};
use super::error::StorageResult;
#[async_trait]
pub trait StorageBackend: Send + Sync {
async fn store_entity(&self, entity: &Entity) -> StorageResult<String>;
async fn get_entity(&self, id: &str) -> StorageResult<Option<Entity>>;
async fn delete_entity(&self, id: &str) -> StorageResult<bool>;
async fn search(&self, query: &str, limit: usize) -> StorageResult<Vec<Entity>>;
async fn list_entities(
&self,
entity_type: Option<EntityType>,
limit: usize,
offset: usize,
) -> StorageResult<Vec<Entity>>;
async fn count_entities(&self, entity_type: Option<EntityType>) -> StorageResult<usize>;
async fn clear(&self) -> StorageResult<()>;
}