tdn_storage 0.1.0

A pluggable library for TDN, include local file, local db, distributed db, decentralized db.
Documentation
use async_fs as fs;
use std::path::PathBuf;

use tdn_types::primitive::DEFAULT_STORAGE_DIR;
type Result<T> = std::io::Result<T>;

pub async fn read_local_file(name: &str) -> Result<Vec<u8>> {
    let mut path = DEFAULT_STORAGE_DIR.clone();
    path.push(name);
    fs::read(path).await
}

pub async fn read_string_local_file(name: &str) -> Result<String> {
    let mut path = DEFAULT_STORAGE_DIR.clone();
    path.push(name);
    fs::read_to_string(path).await
}

pub async fn write_local_file(name: &str, data: &[u8]) -> Result<()> {
    let mut path = DEFAULT_STORAGE_DIR.clone();
    path.push(name);
    fs::write(path, data).await
}

pub async fn remove_local_file(name: &str) -> Result<()> {
    let mut path = DEFAULT_STORAGE_DIR.clone();
    path.push(name);
    fs::remove_file(path).await
}

pub async fn read_absolute_file(path: &PathBuf) -> Result<Vec<u8>> {
    fs::read(path).await
}

pub async fn read_string_absolute_file(path: &PathBuf) -> Result<String> {
    fs::read_to_string(path).await
}

pub async fn write_absolute_file(path: &PathBuf, data: &[u8]) -> Result<()> {
    fs::write(path, data).await
}

pub async fn remove_absolute_file(path: &PathBuf) -> Result<()> {
    fs::remove_file(path).await
}

#[test]
fn test_local_file() {
    let name = "test.file";
    let data = "A".to_owned();

    smol::block_on(async {
        write_local_file(name, data.as_bytes()).await.unwrap();
        assert_eq!(
            read_local_file(name).await.ok(),
            Some(data.as_bytes().to_vec())
        );
        assert_eq!(read_string_local_file(name).await.ok(), Some(data));
        remove_local_file(name).await.unwrap();
    });
}

#[test]
fn test_absolute_file() {
    let name = "test.file";
    let data = "A".to_owned();
    let mut path = PathBuf::from("../");
    path.push(name);

    smol::block_on(async {
        write_absolute_file(&path, data.as_bytes()).await.unwrap();
        assert_eq!(
            read_absolute_file(&path).await.ok(),
            Some(data.as_bytes().to_vec())
        );
        assert_eq!(read_string_absolute_file(&path).await.ok(), Some(data));
        remove_absolute_file(&path).await.unwrap();
    });
}