use anyhow::{Context, Result};
use std::fs;
use std::path::PathBuf;
pub fn get_vapor_dir() -> Result<PathBuf> {
let home_dir = dirs::home_dir().context("Could not find home directory")?;
let vapor_dir = home_dir.join(".vapor");
if !vapor_dir.exists() {
fs::create_dir_all(&vapor_dir).with_context(|| {
format!(
"Failed to create .vapor directory at {}",
vapor_dir.display()
)
})?;
}
Ok(vapor_dir)
}
pub fn get_bookmarks_path() -> Result<PathBuf> {
Ok(get_vapor_dir()?.join("bookmarks.json"))
}
pub fn get_shell_history_path() -> Result<PathBuf> {
Ok(get_vapor_dir()?.join("shell_history"))
}
pub fn get_repl_history_path() -> Result<PathBuf> {
Ok(get_vapor_dir()?.join("repl_history"))
}
#[cfg(test)]
mod tests {
use super::*;
use tempfile::tempdir;
#[test]
fn test_get_vapor_dir_creates_dir() -> Result<()> {
let temp_dir = tempdir()?;
let original_home = std::env::var("HOME");
std::env::set_var("HOME", temp_dir.path().to_str().unwrap());
let vapor_dir = get_vapor_dir()?;
assert!(vapor_dir.exists());
assert!(vapor_dir.ends_with(".vapor"));
if let Ok(home) = original_home {
std::env::set_var("HOME", home);
} else {
std::env::remove_var("HOME");
}
Ok(())
}
}