1use async_trait::async_trait;
4use uuid::Uuid;
5
6use crate::types::{
7 BatchWriteSummary, Edge, EdgeFilter, EdgeSortField, GraphPath, LinkId, NeighborHit,
8 NeighborQuery, Page, PageRequest, SortOrder, StorageResult, TraversalRequest,
9};
10
11#[async_trait]
12pub trait GraphStore: Send + Sync + 'static {
13 async fn upsert_edge(&self, edge: Edge) -> StorageResult<()>;
14 async fn upsert_edges(&self, edges: Vec<Edge>) -> StorageResult<BatchWriteSummary>;
15 async fn get_edge(&self, id: LinkId) -> StorageResult<Option<Edge>>;
16 async fn delete_edge(&self, id: LinkId) -> StorageResult<bool>;
17 async fn query_edges(
18 &self,
19 filter: EdgeFilter,
20 sort: Vec<SortOrder<EdgeSortField>>,
21 page: PageRequest,
22 ) -> StorageResult<Page<Edge>>;
23 async fn count_edges(&self, filter: EdgeFilter) -> StorageResult<u64>;
24 async fn neighbors(
25 &self,
26 node_id: Uuid,
27 query: NeighborQuery,
28 ) -> StorageResult<Vec<NeighborHit>>;
29 async fn traverse(&self, request: TraversalRequest) -> StorageResult<Vec<GraphPath>>;
30}