use crate::*;

/// Create a new directory and all parent directories.
#[must_use]
pub fn make_directory(path: impl AsRef<Path>) -> WriteResult<()> {
    let make_result = std::fs::DirBuilder::new().recursive(true).create(&path);
    Ok(io_result_to_write_result(make_result, &path.as_ref())?)
}

/// Create the parent directory of a path.
#[must_use]
pub fn make_parent_directory(path: impl AsRef<Path>) -> WriteResult<()> {
    match path.as_ref().parent() {
        Some(parent) => make_directory(parent),
        None => Ok(()),
    }
}