use std::path::PathBuf;
use crate::error::ServerError;
pub fn aion_home() -> Result<PathBuf, ServerError> {
let configured = std::env::var_os("AION_HOME");
let path = match configured {
Some(value) if value.is_empty() => {
return Err(ServerError::Config {
message: "AION_HOME must not be empty".to_owned(),
});
}
Some(value) => PathBuf::from(value),
None => {
let Some(home) = std::env::var_os("HOME").filter(|value| !value.is_empty()) else {
return Err(ServerError::Config {
message: "cannot resolve Aion home: set AION_HOME or HOME".to_owned(),
});
};
PathBuf::from(home).join(".aion")
}
};
if path.is_absolute() {
Ok(path)
} else {
std::env::current_dir()
.map(|current| current.join(path))
.map_err(|source| ServerError::Config {
message: format!(
"cannot resolve relative AION_HOME against the current directory: {source}"
),
})
}
}