use crate::core::edge::Edge;
use crate::core::entity::Entity;
use crate::core::episode::Episode;
use crate::core::types::{EdgeId, EntityId, StorageStats};
use crate::error::Result;
pub trait StorageOps: Send {
fn put_entity(&mut self, entity: Entity) -> Result<()>;
fn get_entity(&self, id: EntityId) -> Result<Option<Entity>>;
fn delete_entity(&mut self, id: EntityId) -> Result<bool>;
fn put_edge(&mut self, edge: Edge) -> Result<()>;
fn get_edge(&self, id: EdgeId) -> Result<Option<Edge>>;
fn get_entity_edges(&self, entity_id: EntityId) -> Result<Vec<Edge>>;
fn get_entity_edge_ids(&self, entity_id: EntityId) -> Result<Vec<EdgeId>>;
fn delete_edge(&mut self, id: EdgeId) -> Result<bool>;
fn put_episode(&mut self, episode: Episode) -> Result<()>;
fn get_episode(&self, id: u64) -> Result<Option<Episode>>;
fn update_episode_consolidation(&mut self, id: u64, count: u32) -> Result<bool>;
fn scan_all_entities(&self) -> Result<Vec<Entity>>;
fn scan_all_edges(&self) -> Result<Vec<Edge>>;
fn scan_all_episodes(&self) -> Result<Vec<Episode>>;
fn stats(&self) -> StorageStats;
}