#[cfg(test)]
#[path = "./directory_test.rs"]
mod directory_test;
use crate::error::{ErrorInfo, FsIOError};
use crate::path::as_path::AsPath;
use crate::path::get_parent_directory;
use std::fs::{create_dir_all, remove_dir_all};
pub fn create<T: AsPath + ?Sized>(path: &T) -> Result<(), FsIOError> {
let directory_path = path.as_path();
if directory_path.is_dir() && directory_path.exists() {
return Ok(());
}
match create_dir_all(&directory_path) {
Ok(_) => Ok(()),
Err(error) => Err(FsIOError {
info: ErrorInfo::IOError(
format!("Unable to create directory: {:?}.", &directory_path).to_string(),
Some(error),
),
}),
}
}
pub fn create_parent<T: AsPath + ?Sized>(path: &T) -> Result<(), FsIOError> {
match get_parent_directory(path) {
Some(directory) => create(&directory),
None => Ok(()),
}
}
pub fn delete<T: AsPath + ?Sized>(path: &T) -> Result<(), FsIOError> {
let directory_path = path.as_path();
if directory_path.exists() {
if directory_path.is_dir() {
match remove_dir_all(directory_path) {
Ok(_) => Ok(()),
Err(error) => Err(FsIOError {
info: ErrorInfo::IOError(
format!("Unable to delete directory: {:?}", &directory_path).to_string(),
Some(error),
),
}),
}
} else {
Err(FsIOError {
info: ErrorInfo::NotFile(
format!("Path: {:?} is not a directory.", &directory_path).to_string(),
),
})
}
} else {
Ok(())
}
}