use std::{io::Error as IoError, path::Path};
use shardline_server::{
BackupManifestReport, ServerConfigError, ServerError,
write_backup_manifest as write_server_backup_manifest,
};
use thiserror::Error;
use crate::{config::load_server_config, local_output::write_output_bytes};
#[derive(Debug, Error)]
pub enum BackupRuntimeError {
#[error(transparent)]
Config(#[from] ServerConfigError),
#[error(transparent)]
Server(#[from] ServerError),
#[error("backup manifest output file operation failed")]
Io(#[from] IoError),
}
pub async fn run_backup_manifest(
root: Option<&Path>,
output: &Path,
) -> Result<BackupManifestReport, BackupRuntimeError> {
let config = load_server_config(root)?;
let mut manifest = Vec::new();
let report = write_server_backup_manifest(config, &mut manifest).await?;
write_output_bytes(output, &manifest, false)?;
Ok(report)
}