Skip to main content

oxide_cli/utils/
fs.rs

1use std::{fs, path::Path};
2
3use anyhow::Result;
4
5use crate::templates::TemplateFile;
6
7pub fn read_dir_to_files(path: &Path) -> Result<Vec<TemplateFile>> {
8  let mut files = Vec::new();
9  read_dir_recursive(path, path, &mut files)?;
10  Ok(files)
11}
12
13pub fn read_dir_recursive(
14  base: &Path,
15  current: &Path,
16  files: &mut Vec<TemplateFile>,
17) -> Result<()> {
18  for entry in fs::read_dir(current)? {
19    let entry = entry?;
20    let path = entry.path();
21    let file_type = entry.file_type()?;
22
23    if file_type.is_file() {
24      let contents = fs::read(&path)?;
25      let relative_path = path.strip_prefix(base)?.to_path_buf();
26      files.push(TemplateFile {
27        path: relative_path,
28        contents,
29      });
30    } else if file_type.is_dir() {
31      read_dir_recursive(base, &path, files)?;
32    }
33  }
34
35  Ok(())
36}