Skip to main content

dolly_cli/
paths.rs

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 repos_dir() -> Result<PathBuf, PathsError> {
15    Ok(dolly_dir()?.join("repos"))
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}