edma_storage 0.0.2

EDMA: Embedded Database Management for All
Documentation
use path_absolutize::*;
use std::{
	env::{self, temp_dir},
	path::Path,
};

use crate::Error;

use super::generate_random_i32;

pub fn path_to_string(path: &Path) -> Result<String, Error> {
	match path.to_str() {
		Some(p) => Ok(p.to_string()),
		None => Err(Error::Ds("The DB path is not valid UTF-8".to_string())),
	}
}

pub fn get_absolute_path(path: &str) -> String {
	let p = Path::new(path);
	let cwd = env::current_dir().unwrap();

	p.absolutize_from(&cwd).unwrap().to_str().unwrap().to_string()
}

pub fn generate_path(name: &str, id: Option<i32>) -> String {
	macro_rules! impl_database_path {
					($($name: expr),*) => {
									match name {
										$(
											$name => database_path(name, id),
										)*
										_ => unimplemented!()
									}
					};
	}
	impl_database_path!("rocksdb", "redb", "sled")
}

pub fn database_path(name: &str, id: Option<i32>) -> String {
	let random_id: i32 = generate_random_i32();
	let id = &id.unwrap_or(random_id).to_string();
	let path = if cfg!(target_os = "linux") {
		"/dev/shm/".into()
	} else {
		temp_dir()
	}
	.join(format!("edma-{}-{}", name, id));

	String::from(format!("{}:", name)) + &path_to_string(&path).unwrap()
}