pub_just/
loader.rs

1use super::*;
2
3pub struct Loader {
4  srcs: Arena<String>,
5  paths: Arena<PathBuf>,
6}
7
8impl Loader {
9  pub fn new() -> Self {
10    Self {
11      srcs: Arena::new(),
12      paths: Arena::new(),
13    }
14  }
15
16  pub fn load<'src>(
17    &'src self,
18    root: &Path,
19    path: &Path,
20  ) -> RunResult<(&'src Path, &'src str)> {
21    let src = fs::read_to_string(path).map_err(|io_error| Error::Load {
22      path: path.into(),
23      io_error,
24    })?;
25
26    let relative = path.strip_prefix(root.parent().unwrap()).unwrap_or(path);
27
28    Ok((self.paths.alloc(relative.into()), self.srcs.alloc(src)))
29  }
30}