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 delete_edge(&self, id: LinkId, mode: DeleteMode) -> StorageResult<bool>;
22 async fn query_edges(
24 &self,
25 filter: EdgeFilter,
26 sort: Vec<SortOrder<EdgeSortField>>,
27 page: PageRequest,
28 ) -> StorageResult<Page<Edge>>;
29 async fn count_edges(&self, filter: EdgeFilter) -> StorageResult<u64>;
31 async fn neighbors(
33 &self,
34 node_id: Uuid,
35 query: NeighborQuery,
36 ) -> StorageResult<Vec<NeighborHit>>;
37 async fn traverse(&self, request: TraversalRequest) -> StorageResult<Vec<GraphPath>>;
39}