utils/
dir.rs

1//! ディレクトリ関連。
2
3use anyhow::{Context, Result};
4use std::path::PathBuf;
5
6const APP_NAME: &str = "shanghai";
7
8/// $HOME
9pub fn home_dir() -> Result<PathBuf> {
10    let home_dir = dirs::home_dir().context("Cannot get home dir")?;
11
12    Ok(home_dir)
13}
14
15/// e.g. `$HOME/.config/shanghai`
16///
17/// https://specifications.freedesktop.org/basedir/latest/
18pub fn config_dir() -> Result<PathBuf> {
19    let config_dir = dirs::config_local_dir().context("Cannot get config dir")?;
20
21    Ok(config_dir.join(APP_NAME))
22}
23
24/// e.g. `$HOME/.local/share/shanghai`
25///
26/// https://specifications.freedesktop.org/basedir/latest/
27pub fn share_dir() -> Result<PathBuf> {
28    let data_dir = dirs::data_local_dir().context("Cannot get data dir")?;
29
30    Ok(data_dir.join(APP_NAME))
31}
32
33/// e.g. `$HOME/.cache/shanghai
34///
35/// https://specifications.freedesktop.org/basedir/latest/
36pub fn cache_dir() -> Result<PathBuf> {
37    let home_dir = dirs::cache_dir().context("Cannot get home dir")?;
38
39    Ok(home_dir.join(APP_NAME))
40}