devalang_core/core/utils/
path.rs1use 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}