Skip to main content

relay_knowledge/storage/contracts/code/
catalog.rs

1use crate::domain::{
2    CodeRepositoryRegistration, CodeRepositoryRemovalSummary, CodeRepositoryStatus,
3};
4
5use super::super::{StorageError, StorageFuture};
6
7/// Repository registration, lookup, and lifecycle capability.
8pub 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}