#![forbid(unsafe_code)]
use std::path::PathBuf;
use fstrings::{f, format_args_f};
pub struct ParsedOutput {
directory: PathBuf,
file_name: Option<String>,
}
impl ParsedOutput {
pub fn new(path: &PathBuf) -> Self {
Self {
directory: match path.parent() {
None => PathBuf::new(),
Some(path) => path.to_path_buf(),
},
file_name: match path.file_name() {
None => None,
Some(os_path) => Some(os_path.to_str().unwrap().to_string()),
},
}
}
pub fn get_filled_path(&self, fragments: &Vec<String>) -> PathBuf {
if self.file_name.is_none() {
return self.directory.clone();
}
let mut new_file_name = self.file_name.clone().unwrap();
for i in 0..fragments.len() {
let pos = fragments.len() - i;
let fragment = &fragments[pos - 1];
new_file_name = new_file_name.replace(&f!("#{pos}"), fragment);
}
self.directory.clone().join(PathBuf::from(new_file_name))
}
}