relay_knowledge/storage/
code.rs1use crate::domain::{
4 CodeFileFingerprint, CodeImpactRequest, CodeIndexBatch, CodeIndexCheckpoint, CodeIndexSession,
5 CodeIndexSnapshot, CodeIndexSummary, CodeRepositoryRegistration, CodeRepositoryReport,
6 CodeRepositoryStatus, CodeRepositoryTotals, CodeRetrievalHit, CodeRetrievalRequest,
7};
8
9use super::{StorageError, StorageFuture};
10
11#[derive(Debug, Clone, Default, PartialEq, Eq)]
13pub struct CodeImpactChanges {
14 pub paths: Vec<String>,
15 pub deleted_symbol_names: Vec<String>,
16}
17
18pub trait CodeRepositoryStore: Send + Sync {
20 fn upsert_code_repository(
21 &self,
22 registration: CodeRepositoryRegistration,
23 ) -> StorageFuture<'_, CodeRepositoryStatus>;
24
25 fn code_repository_status(
26 &self,
27 repository: String,
28 ) -> StorageFuture<'_, Option<CodeRepositoryStatus>>;
29
30 fn code_repository_scope_status(
31 &self,
32 repository: String,
33 resolved_commit_sha: String,
34 path_filters: Vec<String>,
35 language_filters: Vec<String>,
36 ) -> StorageFuture<'_, Option<CodeRepositoryStatus>>;
37
38 fn code_file_fingerprints(
39 &self,
40 repository_id: String,
41 ) -> StorageFuture<'_, Vec<CodeFileFingerprint>>;
42
43 fn code_file_fingerprints_for_scope(
44 &self,
45 source_scope: String,
46 ) -> StorageFuture<'_, Vec<CodeFileFingerprint>> {
47 Box::pin(async move {
48 Err(StorageError::InvalidInput(format!(
49 "code file fingerprints for scope '{source_scope}' are unavailable"
50 )))
51 })
52 }
53
54 fn apply_code_index_snapshot(
55 &self,
56 snapshot: CodeIndexSnapshot,
57 ) -> StorageFuture<'_, CodeIndexSummary>;
58
59 fn begin_code_index_session(
60 &self,
61 session: CodeIndexSession,
62 ) -> StorageFuture<'_, CodeIndexCheckpoint> {
63 Box::pin(async move {
64 Err(StorageError::InvalidInput(format!(
65 "checkpointed code index sessions for scope '{}' are unavailable",
66 session.source_scope
67 )))
68 })
69 }
70
71 fn apply_code_index_batch(
72 &self,
73 batch: CodeIndexBatch,
74 ) -> StorageFuture<'_, CodeIndexCheckpoint> {
75 Box::pin(async move {
76 Err(StorageError::InvalidInput(format!(
77 "checkpointed code index batches for scope '{}' are unavailable",
78 batch.source_scope
79 )))
80 })
81 }
82
83 fn finalize_code_index_session(
84 &self,
85 session: CodeIndexSession,
86 ) -> StorageFuture<'_, CodeIndexSummary> {
87 Box::pin(async move {
88 Err(StorageError::InvalidInput(format!(
89 "checkpointed code index finalization for scope '{}' is unavailable",
90 session.source_scope
91 )))
92 })
93 }
94
95 fn search_code(
96 &self,
97 request: CodeRetrievalRequest,
98 ) -> StorageFuture<'_, Vec<CodeRetrievalHit>>;
99
100 fn analyze_code_impact(
101 &self,
102 request: CodeImpactRequest,
103 changes: CodeImpactChanges,
104 ) -> StorageFuture<'_, Vec<CodeRetrievalHit>>;
105
106 fn code_repository_totals(&self) -> StorageFuture<'_, CodeRepositoryTotals> {
107 Box::pin(async { Ok(CodeRepositoryTotals::default()) })
108 }
109
110 fn code_repository_report(
111 &self,
112 repository: String,
113 ) -> StorageFuture<'_, CodeRepositoryReport> {
114 Box::pin(async move {
115 Err(StorageError::InvalidInput(format!(
116 "code repository report for '{repository}' is unavailable"
117 )))
118 })
119 }
120}