Skip to main content

canic_backup/manifest/validation/
mod.rs

1//! Module: manifest::validation
2//!
3//! Responsibility: validate backup manifest contracts before persistence or restore.
4//! Does not own: manifest data definitions, summary rendering, or storage IO.
5//! Boundary: exposes manifest validation methods without changing serialized shapes.
6
7mod binding;
8mod scalar;
9mod sections;
10
11use crate::manifest::{DeploymentBackupManifest, ManifestValidationError};
12
13use binding::{validate_consistency_against_deployment, validate_verification_against_deployment};
14use scalar::{validate_manifest_version, validate_nonempty};
15
16const SUPPORTED_MANIFEST_VERSION: u16 = 1;
17const SHA256_ALGORITHM: &str = "sha256";
18
19impl DeploymentBackupManifest {
20    /// Validate the manifest-level contract before backup finalization or restore planning.
21    pub fn validate(&self) -> Result<(), ManifestValidationError> {
22        validate_manifest_version(self.manifest_version)?;
23        validate_nonempty("backup_id", &self.backup_id)?;
24        validate_nonempty("created_at", &self.created_at)?;
25        self.tool.validate()?;
26        self.source.validate()?;
27        self.consistency.validate()?;
28        self.deployment.validate()?;
29        self.verification.validate()?;
30        validate_consistency_against_deployment(&self.consistency, &self.deployment)?;
31        validate_verification_against_deployment(&self.verification, &self.deployment)?;
32        Ok(())
33    }
34}