use crate::prelude::*;
use std::os::unix::prelude::MetadataExt;
pub struct AdditionalFile {
pub path: PathBuf,
pub file_name: String,
pub sub_dir: PathBuf,
}
impl AdditionalFile {
#[must_use]
pub fn new(path: PathBuf, source_dir: &PathBuf) -> Self {
let sub_dir = path
.strip_prefix(source_dir)
.expect("Additional file path should start with the source directory")
.parent()
.expect("Additional file path should have a parent directory")
.to_path_buf();
let file_name = path
.file_name()
.expect("Additional file should have a name")
.to_os_string()
.to_string_lossy()
.to_string();
AdditionalFile {
path,
file_name,
sub_dir,
}
}
pub async fn get_size(&self) -> Result<u64, Failure<FsAction>> {
let file = TokioFile::open(&self.path)
.await
.map_err(Failure::wrap_with_path(FsAction::OpenFile, &self.path))?;
let metadata = file
.metadata()
.await
.map_err(Failure::wrap_with_path(FsAction::ReadMetadata, &self.path))?;
Ok(metadata.size())
}
}