use std::path::PathBuf;
#[derive(Debug, Clone)]
pub struct PackxelInitializer {
pub name: String,
pub version: String,
}
impl PackxelInitializer {
fn get_home_dir() -> PathBuf {
dirs::home_dir().unwrap_or_else(|| PathBuf::from(std::env::temp_dir()))
}
pub fn get_config_dir(&self) -> PathBuf {
let mut config_dir = Self::get_home_dir();
config_dir.push(".config");
if !config_dir.exists() {
std::fs::create_dir(&config_dir).unwrap();
}
config_dir.push(&self.name);
if !config_dir.exists() {
std::fs::create_dir(&config_dir).unwrap();
}
config_dir
}
pub fn get_log_dir(&self) -> PathBuf {
let mut log_dir = self.get_config_dir();
log_dir.push("logs");
if !log_dir.exists() {
std::fs::create_dir(&log_dir).unwrap();
}
log_dir
}
pub fn get_log_file(&self) -> PathBuf {
let mut log_file = self.get_log_dir();
log_file.push(format!("{}.log", self.name));
log_file
}
pub fn init<S: Into<String>, R: Into<String>>(name: S, version: R) -> Self {
let initializer = Self {
name: name.into(),
version: version.into(),
};
initializer.get_config_dir();
initializer.get_log_dir();
initializer
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_init() {
let version = env!("CARGO_PKG_VERSION");
let initializer = PackxelInitializer::init("packxel", version);
assert_eq!(initializer.name, "packxel");
}
}