Skip to main content

relay_knowledge/storage/contracts/
code_graph.rs

1use crate::domain::{
2    CodeChunkRecord, CodeGraphBatch, CodeGraphCommitReceipt, CodeReferenceRecord, CodeSymbolRecord,
3    GraphVersion,
4};
5
6use super::StorageFuture;
7
8/// Code graph fact persistence and query contract for tree-sitter output.
9pub trait CodeGraphStore: Send + Sync {
10    fn commit_code_graph_batch(
11        &self,
12        batch: CodeGraphBatch,
13    ) -> StorageFuture<'_, CodeGraphCommitReceipt>;
14
15    fn search_code_symbols(
16        &self,
17        request: CodeSymbolSearchRequest,
18    ) -> StorageFuture<'_, Vec<CodeSymbolRecord>>;
19
20    fn search_code_references(
21        &self,
22        request: CodeReferenceSearchRequest,
23    ) -> StorageFuture<'_, Vec<CodeReferenceRecord>>;
24
25    fn search_code_chunks(
26        &self,
27        request: CodeChunkSearchRequest,
28    ) -> StorageFuture<'_, Vec<CodeChunkRecord>>;
29}
30
31/// Bounded code symbol search against an explicit graph snapshot.
32#[derive(Debug, Clone, PartialEq, Eq)]
33pub struct CodeSymbolSearchRequest {
34    pub source_scope: Option<String>,
35    pub path: Option<String>,
36    pub name: Option<String>,
37    pub graph_version: GraphVersion,
38    pub limit: usize,
39}
40
41/// Bounded code reference search against an explicit graph snapshot.
42#[derive(Debug, Clone, PartialEq, Eq)]
43pub struct CodeReferenceSearchRequest {
44    pub source_scope: Option<String>,
45    pub path: Option<String>,
46    pub symbol_text: Option<String>,
47    pub target_symbol_id: Option<String>,
48    pub graph_version: GraphVersion,
49    pub limit: usize,
50}
51
52/// Bounded code chunk search against an explicit graph snapshot.
53#[derive(Debug, Clone, PartialEq, Eq)]
54pub struct CodeChunkSearchRequest {
55    pub source_scope: Option<String>,
56    pub path: Option<String>,
57    pub query: Option<String>,
58    pub graph_version: GraphVersion,
59    pub limit: usize,
60}