1use async_trait::async_trait;
4use uuid::Uuid;
5
6use crate::types::{
7 BatchWriteSummary, DeleteMode, Edge, EdgeFilter, EdgeSortField, GraphPath, LinkId, NeighborHit,
8 NeighborQuery, Page, PageRequest, SortOrder, StorageResult, TraversalRequest,
9};
10
11#[async_trait]
13pub trait GraphStore: Send + Sync + 'static {
14 async fn upsert_edge(&self, edge: Edge) -> StorageResult<()>;
16 async fn upsert_edges(&self, edges: Vec<Edge>) -> StorageResult<BatchWriteSummary>;
18 async fn get_edge(&self, id: LinkId) -> StorageResult<Option<Edge>>;
20 async fn get_edge_including_deleted(&self, id: LinkId) -> StorageResult<Option<Edge>>;
23 async fn delete_edge(&self, id: LinkId, mode: DeleteMode) -> StorageResult<bool>;
25 async fn query_edges(
27 &self,
28 filter: EdgeFilter,
29 sort: Vec<SortOrder<EdgeSortField>>,
30 page: PageRequest,
31 ) -> StorageResult<Page<Edge>>;
32 async fn count_edges(&self, filter: EdgeFilter) -> StorageResult<u64>;
34 async fn neighbors(
36 &self,
37 node_id: Uuid,
38 query: NeighborQuery,
39 ) -> StorageResult<Vec<NeighborHit>>;
40 async fn traverse(&self, request: TraversalRequest) -> StorageResult<Vec<GraphPath>>;
42 async fn purge_incident_edges(&self, node_id: Uuid) -> StorageResult<u64>;
46}