1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
use std::path::PathBuf;
use crate::rh_name;
pub trait OsDirs {
fn app_path(&self, filename: &str) -> Option<PathBuf>;
fn app_config_directory(&self) -> Option<PathBuf>;
fn config_directory(&self) -> Option<PathBuf>;
}
#[derive(Default)]
pub struct DefaultOsDirs;
impl OsDirs for DefaultOsDirs {
fn app_path(&self, filename: &str) -> Option<PathBuf> {
self.app_config_directory().map(|path| path.join(filename))
}
fn app_config_directory(&self) -> Option<PathBuf> {
self.config_directory().map(|path| path.join(rh_name!()))
}
fn config_directory(&self) -> Option<PathBuf> {
dirs::config_dir()
}
}