1use std::path::PathBuf;
2
3use thiserror::Error;
4
5#[derive(Debug, Error)]
6pub enum PathsError {
7 #[error("could not determine home directory")]
8 NoHome,
9
10 #[error("could not determine install directory")]
11 NoInstallDir,
12}
13
14pub fn repositories_dir() -> Result<PathBuf, PathsError> {
15 Ok(dolly_dir()?.join("repositories"))
16}
17
18pub fn recipes_dir() -> Result<PathBuf, PathsError> {
19 Ok(dolly_dir()?.join("recipes"))
20}
21
22pub fn default_install_dir() -> Result<PathBuf, PathsError> {
23 dirs::executable_dir()
24 .or_else(|| dirs::home_dir().map(|h| h.join(".local/bin")))
25 .ok_or(PathsError::NoInstallDir)
26}
27
28fn dolly_dir() -> Result<PathBuf, PathsError> {
29 Ok(dirs::home_dir().ok_or(PathsError::NoHome)?.join(".dolly"))
30}