relay_knowledge/storage/contracts/code/
catalog.rs1use crate::domain::{
2 CodeRepositoryRegistration, CodeRepositoryRemovalSummary, CodeRepositoryStatus,
3};
4
5use super::super::{StorageError, StorageFuture};
6
7pub trait RepositoryCatalogStore: Send + Sync {
9 fn upsert_code_repository(
10 &self,
11 registration: CodeRepositoryRegistration,
12 ) -> StorageFuture<'_, CodeRepositoryStatus>;
13
14 fn code_repository_status(
15 &self,
16 repository: String,
17 ) -> StorageFuture<'_, Option<CodeRepositoryStatus>>;
18
19 fn list_code_repositories(&self) -> StorageFuture<'_, Vec<CodeRepositoryStatus>> {
20 Box::pin(async {
21 Err(StorageError::InvalidInput(
22 "code repository catalog listing is unavailable".to_owned(),
23 ))
24 })
25 }
26
27 fn remove_code_repository(
28 &self,
29 repository: String,
30 now_ms: u64,
31 ) -> StorageFuture<'_, Option<CodeRepositoryRemovalSummary>> {
32 Box::pin(async move {
33 Err(StorageError::InvalidInput(format!(
34 "code repository removal for '{repository}' at {now_ms} is unavailable"
35 )))
36 })
37 }
38
39 fn code_repository_scope_status(
40 &self,
41 repository: String,
42 resolved_commit_sha: String,
43 path_filters: Vec<String>,
44 language_filters: Vec<String>,
45 ) -> StorageFuture<'_, Option<CodeRepositoryStatus>>;
46
47 fn latest_code_repository_scope_status(
48 &self,
49 repository: String,
50 _path_filters: Vec<String>,
51 _language_filters: Vec<String>,
52 ) -> StorageFuture<'_, Option<CodeRepositoryStatus>> {
53 Box::pin(async move {
54 Err(StorageError::InvalidInput(format!(
55 "latest code repository scope for '{repository}' is unavailable"
56 )))
57 })
58 }
59}