use std::path::PathBuf;
use crate::{
Download,
download_metadata::DownloadMetadata,
error::OdlError,
fs_utils::{atomic_replace, read_delimited_message_from_path},
};
pub async fn recover_metadata(instruction: &Download) -> Result<(), OdlError> {
let metadata_temp_path = instruction.metadata_temp_path();
match read_delimited_message_from_path::<DownloadMetadata, PathBuf>(&metadata_temp_path).await {
Ok(_) => {
atomic_replace(metadata_temp_path, instruction.metadata_path()).await?;
}
Err(_) => {
if tokio::fs::try_exists(&metadata_temp_path)
.await
.unwrap_or(false)
{
tokio::fs::remove_file(&metadata_temp_path).await?;
}
}
}
Ok(())
}