1use std::path::{Path, PathBuf};
3
4use dirs::cache_dir;
5use log::debug;
6
7use crate::{
8 Error,
9 consts::{PROJECT_NAME, TESTING_DIR},
10};
11
12#[derive(Clone, Debug)]
14pub struct CacheDir(PathBuf);
15
16impl CacheDir {
17 pub fn from_xdg() -> Result<Self, Error> {
26 let path = cache_dir()
27 .ok_or(Error::CannotGetCacheDir)?
28 .join(PROJECT_NAME)
29 .join(TESTING_DIR);
30 debug!("Using path {path:?} as cache dir.");
31
32 Ok(Self(path))
33 }
34}
35
36impl From<PathBuf> for CacheDir {
37 fn from(value: PathBuf) -> Self {
38 debug!("Using path {value:?} as cache dir.");
39
40 Self(value)
41 }
42}
43
44impl AsRef<Path> for CacheDir {
45 fn as_ref(&self) -> &Path {
46 self.0.as_path()
47 }
48}