rsdos 0.2.0

key-value store for file I/O on disk
Documentation
use std::fs;
use std::path::{Path, PathBuf};

use crate::Error;


pub fn create_dir(p: &Path) -> Result<(), Error> {
    fs::create_dir_all(p).map_err(|e| Error::CreateDirectory {
        source: e,
        path: p.to_owned(),
    })
}

pub struct Dir<'a>(pub &'a PathBuf);

impl<'a> Dir<'a> {
    pub fn new_folder(self, component: &str) -> Result<(), Error> {
        let mut sub_folder = self.0.clone();
        sub_folder.push(component);
        create_dir(&sub_folder)?;
        Ok(())
    }

    #[must_use]
    pub fn at_path(self, component: &str) -> PathBuf {
        let mut file = self.0.clone();
        file.push(component);
        file
    }

    pub fn is_empty(self) -> Result<bool, std::io::Error> {
        let mut entries = fs::read_dir(self.0.clone())?;
        Ok(entries.next().is_none())
    }
}