devalang_core/core/utils/
path.rs

1use std::path::{Path, PathBuf};
2
3pub fn find_entry_file(entry: &str) -> Option<String> {
4    let path = Path::new(entry);
5
6    if path.is_file() {
7        return Some(normalize_path(entry));
8    }
9
10    if path.is_dir() {
11        let candidate = path.join("index.deva");
12        if candidate.exists() {
13            return Some(normalize_path(&candidate));
14        }
15    }
16
17    None
18}
19
20pub fn normalize_path<P: AsRef<Path>>(path: P) -> String {
21    let path_buf = PathBuf::from(path.as_ref());
22    path_buf
23        .components()
24        .collect::<PathBuf>()
25        .to_string_lossy()
26        .replace('\\', "/")
27}
28
29pub fn resolve_relative_path(base: &str, import: &str) -> String {
30    let base_path = Path::new(base).parent().unwrap_or_else(|| Path::new(""));
31    let full_path = base_path.join(import);
32    full_path
33        .components()
34        .collect::<PathBuf>()
35        .to_string_lossy()
36        .replace("\\", "/")
37}