use std::fs::{create_dir_all, File}; use std::io::prelude::*; use std::path::{Path, PathBuf}; use error::Error; use logger::LogLevel; pub fn add_to_beginning>(path: PathBuf, to_add: T) -> Result { if let (Some(parent), Some(file_name)) = (path.clone().parent(), path.clone().file_name()) { let parent = Path::new(&to_add.into()).join(parent); Ok(parent.join(file_name)) } else { return Err(Error::new( LogLevel::SEVERE, format!("Could not find parent folder or file name for {:?}", path), )); } } pub fn write_file>( path: PathBuf, content: T, overwrite: bool, ) -> Result<(), Error> { if let Some(parent) = path.clone().parent() { create_dir_all(parent.clone())?; } else { return Err(Error::new( LogLevel::SEVERE, format!("Could not find parent folder for {:?}", path), )); } let content = content.into(); if path.exists() && !overwrite { Err(Error::new( LogLevel::SEVERE, format!( "File already exists: {:?} -- Consider using overwrite-flag", path ), )) } else { match File::create(path) { Ok(mut file) => Ok(file.write_all(content.as_bytes()).unwrap()), Err(err) => Err(Error::from(err)), } } }