use std::path::{Path, PathBuf};
pub const ARTIFACT_DIR_SUFFIX: &str = ".veloq";
pub fn artifact_dir_for(source: &Path) -> PathBuf {
if let Some(file_name) = source.file_name() {
let mut cache_name = file_name.to_owned();
cache_name.push(ARTIFACT_DIR_SUFFIX);
return source
.parent()
.filter(|p| !p.as_os_str().is_empty())
.map_or_else(|| PathBuf::from(&cache_name), |p| p.join(&cache_name));
}
let mut p = source.as_os_str().to_owned();
p.push(ARTIFACT_DIR_SUFFIX);
PathBuf::from(p)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn artifact_dir_appends_suffix_to_file_or_directory_name() {
assert_eq!(
artifact_dir_for(Path::new("/tmp/trace.nsys-rep")),
PathBuf::from("/tmp/trace.nsys-rep.veloq")
);
assert_eq!(
artifact_dir_for(Path::new("/tmp/trace_pqtdir/")),
PathBuf::from("/tmp/trace_pqtdir.veloq")
);
assert_eq!(
artifact_dir_for(Path::new("trace_pqtdir/")),
PathBuf::from("trace_pqtdir.veloq")
);
}
}