50 lines
1.4 KiB
Rust
50 lines
1.4 KiB
Rust
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<T: Into<String>>(path: PathBuf, to_add: T) -> Result<PathBuf, Error> {
|
|
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<T: Into<String>>(
|
|
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)),
|
|
}
|
|
}
|
|
}
|