Skip to main content

coil_ops/
catalog.rs

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}