fsdb 0.1.11

filesystem database
Documentation
use crate::Result;
use rmp_serde::{decode, encode};
use serde::{de::DeserializeOwned, Serialize};
use std::fs;
use std::path::PathBuf;

pub fn fs_put<V: Serialize + DeserializeOwned>(path: PathBuf, value: V) -> Result<()> {
    let mut f = fs::File::create(path.clone())?;
    encode::write(&mut f, &value)?;
    Ok(())
}
pub fn fs_get<V: Serialize + DeserializeOwned>(path: PathBuf) -> Result<V> {
    let f = fs::File::open(path)?;
    Ok(decode::from_read(f)?)
}
pub fn fs_remove(path: PathBuf) -> Result<()> {
    Ok(std::fs::remove_file(path)?)
}
pub fn fs_list(path: PathBuf) -> Result<Vec<String>> {
    let paths = fs::read_dir(path)?;
    let mut r = Vec::new();
    paths.for_each(|name| {
        if let Ok(na) = name {
            if let Ok(n) = na.file_name().into_string() {
                r.push(n);
            }
        }
    });
    Ok(r)
}
pub fn fs_clear(path: PathBuf) -> Result<()> {
    Ok(fs::remove_dir_all(path)?)
}
pub fn maxify(name: &str, max_file_name: Option<usize>) -> String {
    if let Some(max) = max_file_name {
        let mut s = name.to_string();
        s.truncate(max);
        s
    } else {
        name.to_owned()
    }
}