Skip to main content

kg/
cache_paths.rs

1use std::path::{Path, PathBuf};
2
3pub fn cache_root_for_cwd(cwd: &Path) -> PathBuf {
4    cwd.join(".kg").join("cache")
5}
6
7pub fn cache_root_for_graph(graph_path: &Path) -> PathBuf {
8    if let Some(root) = detect_kg_root_for_graph(graph_path) {
9        return root.join("cache");
10    }
11    graph_path
12        .parent()
13        .map(|parent| parent.join(".kg").join("cache"))
14        .unwrap_or_else(|| PathBuf::from(".kg").join("cache"))
15}
16
17fn detect_kg_root_for_graph(graph_path: &Path) -> Option<PathBuf> {
18    let mut current = graph_path.parent();
19    while let Some(dir) = current {
20        if dir.file_name().and_then(|name| name.to_str()) == Some("graphs")
21            && dir
22                .parent()
23                .and_then(|parent| parent.file_name())
24                .and_then(|name| name.to_str())
25                == Some(".kg")
26        {
27            return dir.parent().map(Path::to_path_buf);
28        }
29        current = dir.parent();
30    }
31    None
32}