use crate::dirs::{config_home, data_home};
use std::path::{Path, PathBuf};
use std::fs;
use std::io;
pub struct Cfg;
impl Cfg {
pub fn path(appname: &str, file: &str) -> PathBuf {
local_cfg_dir(appname).join(file)
}
pub fn read(appname: &str, file: &str) -> io::Result<String> {
fs::read_to_string(Self::path(appname, file))
}
pub fn save(appname: &str, file: &str, data: impl AsRef<[u8]>) -> io::Result<()> {
fs::create_dir_all(local_cfg_dir(appname))?;
fs::write(Self::path(appname, file), data)
}
pub fn global_path(appname: &str, file: &str) -> PathBuf {
global_cfg_dir(appname).join(file)
}
pub fn global_read(appname: &str, file: &str) -> io::Result<String> {
fs::read_to_string(Self::global_path(appname, file))
}
pub fn global_save(appname: &str, file: &str, data: impl AsRef<[u8]>) -> io::Result<()> {
fs::create_dir_all(global_cfg_dir(appname))?;
fs::write(Self::global_path(appname, file), data)
}
}
pub fn local_cfg_dir(appname: &str) -> PathBuf {
config_home().join(appname)
}
pub fn global_cfg_dir(appname: &str) -> PathBuf {
if cfg!(target_family = "unix") {
Path::new("/etc").join(appname)
} else {
local_cfg_dir(appname)
}
}
pub struct Appdata;
impl Appdata {
pub fn path(appname: &str, file: &str) -> PathBuf {
local_data_dir(appname).join(file)
}
pub fn read_str(appname: &str, file: &str) -> io::Result<String> {
fs::read_to_string(Self::path(appname, file))
}
pub fn read(appname: &str, file: &str) -> io::Result<Vec<u8>> {
fs::read(Self::path(appname, file))
}
pub fn save(appname: &str, file: &str, data: impl AsRef<[u8]>) -> io::Result<()> {
fs::create_dir_all(local_data_dir(appname))?;
fs::write(Self::path(appname, file), data)
}
}
pub fn local_data_dir(appname: &str) -> PathBuf {
data_home().join(appname)
}