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}