use std::path::Path;
use crate::{FullProjectDirs, Project};
pub trait Unix {
fn unix_prefixed(&self, parent_path: &Path, prefix: &str) -> FullProjectDirs;
fn unix(&self, parent_path: &Path) -> FullProjectDirs {
self.unix_prefixed(parent_path, "")
}
fn unix_pwd(&self) -> Result<FullProjectDirs, std::io::Error>;
fn unix_home(&self) -> Option<FullProjectDirs>;
fn unix_binary(&self) -> Result<FullProjectDirs, std::io::Error>;
}
impl Unix for Project {
fn unix_prefixed(&self, parent_path: &Path, prefix: &str) -> FullProjectDirs {
let project_name = format!("{}{}", prefix, self.application_name);
let full_project_path = parent_path.join(project_name);
FullProjectDirs {
cache: full_project_path.join("cache"),
data: full_project_path.join("data"),
log: full_project_path.join("log"),
runtime: Some(full_project_path.join("tmp")),
state: full_project_path.join("state"),
bin: full_project_path.join("bin"),
config: full_project_path.clone(),
include: full_project_path.join("include"),
lib: full_project_path.join("lib"),
project_root: Some(full_project_path),
}
}
fn unix_pwd(&self) -> Result<FullProjectDirs, std::io::Error> {
std::env::current_dir().map(|path| self.unix_prefixed(&path, "."))
}
fn unix_home(&self) -> Option<FullProjectDirs> {
crate::dir_utils::home_dir().map(|path| self.unix_prefixed(&path, "."))
}
fn unix_binary(&self) -> Result<FullProjectDirs, std::io::Error> {
std::env::current_exe().map(|path| self.unix_prefixed(&path, "."))
}
}