use crate::environ::EnvVal;
use crate::local::LocalInfo;
use camino::{Utf8Path, Utf8PathBuf};
pub struct Info {
home: Utf8PathBuf,
app_name: String,
}
impl Info {
pub fn new<T>(
app_name: &str,
home: &T,
) -> Self
where
T: AsRef<Utf8Path> + ?Sized,
{
let app_name = app_name.to_owned();
let home = home.as_ref().to_owned();
Self { home, app_name }
}
}
impl LocalInfo for Info {
fn get_cache_home(&self) -> Utf8PathBuf {
let default = self.home.join(".cache");
let out: Utf8PathBuf = EnvVal::from("XDG_CACHE_HOME")
.with_default_value(&default)
.into();
out.join(&self.app_name)
}
fn get_config_home(&self) -> Utf8PathBuf {
let default = self.home.join(".config");
let out: Utf8PathBuf = EnvVal::from("XDG_CONFIG_HOME")
.with_default_value(&default)
.into();
out.join(&self.app_name)
}
fn get_data_home(&self) -> Utf8PathBuf {
let default = self.home.join(".local").join("share");
let out: Utf8PathBuf = EnvVal::from("XDG_DATA_HOME")
.with_default_value(&default)
.into();
out.join(&self.app_name)
}
fn get_log_home(&self) -> Utf8PathBuf {
let key =
format!("{}_LOG_DIR", self.app_name.to_uppercase());
let default = self.get_state_home().join("log");
let out: Utf8PathBuf =
EnvVal::from(&key).with_default_value(&default).into();
out
}
fn get_state_home(&self) -> Utf8PathBuf {
let default = self.home.join(".local").join("state");
let out: Utf8PathBuf = EnvVal::from("XDG_STATE_HOME")
.with_default_value(&default)
.into();
out.join(&self.app_name)
}
}