use anyhow::{Context, Result};
use std::fs;
use std::path::PathBuf;
pub fn config_dir() -> Result<PathBuf> {
let dir = dirs::config_dir()
.context("Could not determine config directory")?
.join("reeve");
Ok(dir)
}
pub fn config_path() -> Result<PathBuf> {
Ok(config_dir()?.join("config.toml"))
}
pub fn state_path() -> Result<PathBuf> {
Ok(config_dir()?.join("state.toml"))
}
pub fn generated_dir() -> Result<PathBuf> {
Ok(config_dir()?.join("generated"))
}
pub fn run_dir() -> Result<PathBuf> {
let home = dirs::home_dir().context("Could not determine home directory")?;
Ok(home.join(".reeve").join("run"))
}
pub fn shim_dir() -> Result<PathBuf> {
let home = dirs::home_dir().context("Could not determine home directory")?;
Ok(home.join(".reeve").join("bin"))
}
pub fn certs_dir() -> Result<PathBuf> {
Ok(config_dir()?.join("certs"))
}
pub fn logs_dir() -> Result<PathBuf> {
Ok(config_dir()?.join("logs"))
}
pub fn ensure_dirs() -> Result<()> {
for dir in [
config_dir()?,
generated_dir()?,
generated_dir()?.join("caddy"),
generated_dir()?.join("apache"),
generated_dir()?.join("nginx"),
generated_dir()?.join("ols"),
generated_dir()?.join("fpm"),
run_dir()?,
shim_dir()?,
certs_dir()?,
logs_dir()?,
] {
fs::create_dir_all(&dir)
.with_context(|| format!("Failed to create directory: {}", dir.display()))?;
}
Ok(())
}