use std::path::{Path, PathBuf};
pub fn config_dir() -> PathBuf {
#[cfg(target_os = "windows")]
{
program_data().join("Kanade").join("config")
}
#[cfg(not(target_os = "windows"))]
{
PathBuf::from("/etc/kanade")
}
}
pub fn data_dir() -> PathBuf {
#[cfg(target_os = "windows")]
{
program_data().join("Kanade").join("data")
}
#[cfg(not(target_os = "windows"))]
{
PathBuf::from("/var/lib/kanade")
}
}
pub fn log_dir() -> PathBuf {
#[cfg(target_os = "windows")]
{
program_data().join("Kanade").join("logs")
}
#[cfg(not(target_os = "windows"))]
{
PathBuf::from("/var/log/kanade")
}
}
#[cfg(target_os = "windows")]
fn program_data() -> PathBuf {
std::env::var_os("ProgramData")
.map(PathBuf::from)
.unwrap_or_else(|| PathBuf::from(r"C:\ProgramData"))
}
pub fn find_config(flag: Option<&Path>, env_var: &str, basename: &str) -> anyhow::Result<PathBuf> {
if let Some(p) = flag {
return Ok(p.to_path_buf());
}
if let Ok(raw) = std::env::var(env_var)
&& !raw.is_empty()
{
return Ok(PathBuf::from(raw));
}
let std_path = config_dir().join(basename);
if std_path.exists() {
return Ok(std_path);
}
Err(anyhow::anyhow!(
"config not found — pass `--config <path>`, set `{env_var}`, or place `{basename}` at `{}`",
std_path.display(),
))
}