1pub mod definitions;
4pub mod stats;
5
6use std::env;
7use std::path::PathBuf;
8
9use anyhow::{Context, Result};
10use directories::ProjectDirs;
11
12const CONFIG_DIR: &str = "LORE_CONFIG_DIR";
18const DATA_DIR: &str = "LORE_DATA_DIR";
19
20fn project_dirs() -> Result<ProjectDirs> {
21 ProjectDirs::from("", "", "lore").context("could not determine this platform's home directory")
22}
23
24fn overridden(variable: &str) -> Option<PathBuf> {
25 env::var_os(variable)
26 .filter(|value| !value.is_empty())
27 .map(PathBuf::from)
28}
29
30pub fn user_library() -> Result<PathBuf> {
36 let directory = match overridden(CONFIG_DIR) {
37 Some(directory) => directory,
38 None => project_dirs()?.config_dir().to_path_buf(),
39 };
40
41 Ok(directory.join("commands.yaml"))
42}
43
44pub fn stats_database() -> Result<PathBuf> {
48 let directory = match overridden(DATA_DIR) {
49 Some(directory) => directory,
50 None => project_dirs()?.data_dir().to_path_buf(),
51 };
52
53 Ok(directory.join("stats.db"))
54}
55
56pub fn sync_dir() -> Result<PathBuf> {
63 let directory = match overridden(DATA_DIR) {
64 Some(directory) => directory,
65 None => project_dirs()?.data_dir().to_path_buf(),
66 };
67
68 Ok(directory.join("sync"))
69}