pub mod capacity_import;
pub mod infrastructure_bootstrap;
mod observation;
mod progress;
#[cfg(test)]
pub(in crate::fleet_ensure) mod tests;
use crate::fleet_ensure::model::DesiredFleet;
use canic_core::cdk::utils::hash::sha256_hex;
use std::{fs, io, path::Path};
use thiserror::Error as ThisError;
pub use observation::{FleetObservationStage, FleetObservationTiming};
pub use progress::{
FleetComponentProgress, FleetComponentProgressState, FleetEnsureActionKind,
FleetEnsureActionProgress, FleetEnsurePhase, FleetEnsureProgress, FleetEnsureProgressState,
FleetProvisioningProgress,
};
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct LoadedDesiredFleet {
pub desired: DesiredFleet,
pub sha256: String,
}
#[derive(Debug, ThisError)]
pub enum DesiredFleetLoadError {
#[error("failed to read desired Fleet document {}: {source}", path.display())]
Read {
path: std::path::PathBuf,
#[source]
source: io::Error,
},
#[error("failed to parse desired Fleet document {}: {source}", path.display())]
Parse {
path: std::path::PathBuf,
#[source]
source: toml::de::Error,
},
}
pub fn load_desired_fleet(path: &Path) -> Result<LoadedDesiredFleet, DesiredFleetLoadError> {
let bytes = fs::read(path).map_err(|source| DesiredFleetLoadError::Read {
path: path.to_path_buf(),
source,
})?;
let desired = toml::from_slice::<DesiredFleet>(&bytes).map_err(|source| {
DesiredFleetLoadError::Parse {
path: path.to_path_buf(),
source,
}
})?;
Ok(LoadedDesiredFleet {
desired,
sha256: sha256_hex(&bytes),
})
}