Skip to main content

khive_storage/
graph.rs

1//! Graph storage capability — edge CRUD and traversal.
2
3use 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}