1use crate::OpsModelError;
2use crate::bulk::BulkCatalog;
3use crate::recovery::RecoveryCatalog;
4use crate::reports::ReportCatalog;
5use crate::search::SearchCatalog;
6use coil_core::ModuleManifest;
7
8#[derive(Debug, Clone, PartialEq, Eq)]
9pub struct OpsCatalog {
10 pub search: SearchCatalog,
11 pub reports: ReportCatalog,
12 pub bulk: BulkCatalog,
13 pub recovery: RecoveryCatalog,
14}
15
16impl OpsCatalog {
17 pub fn new(
18 search: SearchCatalog,
19 reports: ReportCatalog,
20 bulk: BulkCatalog,
21 recovery: RecoveryCatalog,
22 ) -> Self {
23 Self {
24 search,
25 reports,
26 bulk,
27 recovery,
28 }
29 }
30
31 pub fn standard() -> Self {
32 Self {
33 search: SearchCatalog::standard(),
34 reports: ReportCatalog::standard(),
35 bulk: BulkCatalog::standard(),
36 recovery: RecoveryCatalog::standard(),
37 }
38 }
39
40 pub fn from_manifests(manifests: &[ModuleManifest]) -> Result<Self, OpsModelError> {
41 let catalog = Self {
42 search: SearchCatalog::from_manifests(manifests)?,
43 reports: ReportCatalog::from_manifests(manifests)?,
44 bulk: BulkCatalog::from_manifests(manifests)?,
45 recovery: RecoveryCatalog::standard(),
46 };
47 catalog.validate()?;
48 Ok(catalog)
49 }
50
51 pub fn validate(&self) -> Result<(), OpsModelError> {
52 self.search.validate()?;
53 self.reports.validate()?;
54 self.bulk.validate()?;
55 self.recovery.validate()?;
56 Ok(())
57 }
58}
59
60impl Default for OpsCatalog {
61 fn default() -> Self {
62 Self::standard()
63 }
64}