canic_backup/restore/plan/
mod.rs1mod error;
2mod mapping;
3mod members;
4mod ordering;
5mod summary;
6mod types;
7
8pub use error::RestorePlanError;
9pub use types::*;
10
11use crate::manifest::FleetBackupManifest;
12use mapping::{validate_mapping, validate_mapping_sources};
13use members::resolve_members;
14use ordering::{order_members, restore_ordering_summary};
15use summary::{
16 restore_identity_summary, restore_operation_summary, restore_readiness_summary,
17 restore_snapshot_summary, restore_verification_summary,
18};
19
20pub struct RestorePlanner;
25
26impl RestorePlanner {
27 pub fn plan(
29 manifest: &FleetBackupManifest,
30 mapping: Option<&RestoreMapping>,
31 ) -> Result<RestorePlan, RestorePlanError> {
32 manifest.validate()?;
33 if let Some(mapping) = mapping {
34 validate_mapping(mapping)?;
35 validate_mapping_sources(manifest, mapping)?;
36 }
37
38 let members = resolve_members(manifest, mapping)?;
39 let identity_summary = restore_identity_summary(&members, mapping.is_some());
40 let snapshot_summary = restore_snapshot_summary(&members);
41 let verification_summary = restore_verification_summary(manifest, &members);
42 let readiness_summary = restore_readiness_summary(&snapshot_summary, &verification_summary);
43 let members = order_members(members)?;
44 let ordering_summary = restore_ordering_summary(&members);
45 let operation_summary =
46 restore_operation_summary(manifest.fleet.members.len(), &verification_summary);
47
48 Ok(RestorePlan {
49 backup_id: manifest.backup_id.clone(),
50 source_environment: manifest.source.environment.clone(),
51 source_root_canister: manifest.source.root_canister.clone(),
52 topology_hash: manifest.fleet.topology_hash.clone(),
53 member_count: manifest.fleet.members.len(),
54 identity_summary,
55 snapshot_summary,
56 verification_summary,
57 readiness_summary,
58 operation_summary,
59 ordering_summary,
60 fleet_verification_checks: manifest.verification.fleet_checks.clone(),
61 members,
62 })
63 }
64}