paths.rs

 1use std::{
 2    path::{Path, PathBuf},
 3    sync::LazyLock,
 4};
 5
 6pub static DATA_DIR: LazyLock<PathBuf> = LazyLock::new(|| {
 7    let dir = dirs::home_dir().unwrap().join(".zed_ep");
 8    ensure_dir(&dir)
 9});
10pub static CACHE_DIR: LazyLock<PathBuf> = LazyLock::new(|| ensure_dir(&DATA_DIR.join("cache")));
11pub static REPOS_DIR: LazyLock<PathBuf> = LazyLock::new(|| ensure_dir(&DATA_DIR.join("repos")));
12pub static WORKTREES_DIR: LazyLock<PathBuf> =
13    LazyLock::new(|| ensure_dir(&DATA_DIR.join("worktrees")));
14pub static RUN_DIR: LazyLock<PathBuf> = LazyLock::new(|| {
15    DATA_DIR
16        .join("runs")
17        .join(chrono::Local::now().format("%d-%m-%y-%H_%M_%S").to_string())
18});
19pub static LATEST_EXAMPLE_RUN_DIR: LazyLock<PathBuf> = LazyLock::new(|| DATA_DIR.join("latest"));
20pub static LLM_CACHE_DB: LazyLock<PathBuf> = LazyLock::new(|| CACHE_DIR.join("llm_cache.sqlite"));
21pub static FAILED_EXAMPLES_DIR: LazyLock<PathBuf> =
22    LazyLock::new(|| ensure_dir(&RUN_DIR.join("failed")));
23
24fn ensure_dir(path: &Path) -> PathBuf {
25    std::fs::create_dir_all(path).expect("Failed to create directory");
26    path.to_path_buf()
27}