Skip to main content

canic_backup/plan/preflight/
requests.rs

1//! Module: plan::preflight::requests
2//!
3//! Responsibility: project backup plans into typed execution preflight requests.
4//! Does not own: request execution, receipt validation, or plan construction.
5//! Boundary: exposes immutable request views for external preflight providers.
6
7use crate::plan::{
8    BackupPlan, QuiescencePreflightRequest, QuiescencePreflightTarget, TopologyPreflightRequest,
9    TopologyPreflightTarget,
10};
11
12impl BackupPlan {
13    /// Build the typed topology preflight request for this plan.
14    #[must_use]
15    pub fn topology_preflight_request(&self) -> TopologyPreflightRequest {
16        TopologyPreflightRequest {
17            plan_id: self.plan_id.clone(),
18            run_id: self.run_id.clone(),
19            fleet: self.fleet.clone(),
20            environment: self.environment.clone(),
21            root_canister_id: self.root_canister_id.clone(),
22            selected_subtree_root: self.selected_subtree_root.clone(),
23            selected_scope_kind: self.selected_scope_kind.clone(),
24            topology_hash_before_quiesce: self.topology_hash_before_quiesce.clone(),
25            targets: self
26                .targets
27                .iter()
28                .map(TopologyPreflightTarget::from)
29                .collect(),
30        }
31    }
32
33    /// Build the typed quiescence preflight request for this plan.
34    #[must_use]
35    pub fn quiescence_preflight_request(&self) -> QuiescencePreflightRequest {
36        QuiescencePreflightRequest {
37            plan_id: self.plan_id.clone(),
38            run_id: self.run_id.clone(),
39            fleet: self.fleet.clone(),
40            environment: self.environment.clone(),
41            root_canister_id: self.root_canister_id.clone(),
42            selected_subtree_root: self.selected_subtree_root.clone(),
43            quiescence_policy: self.quiescence_policy.clone(),
44            targets: self
45                .targets
46                .iter()
47                .map(QuiescencePreflightTarget::from)
48                .collect(),
49        }
50    }
51}