diff --git a/Cargo.lock b/Cargo.lock index f2ab52b..954456f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1625,7 +1625,6 @@ dependencies = [ "tree-sitter-toml-ng", "tree-sitter-typescript", "tree-sitter-yaml", - "walkdir", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 561f814..5c78ed9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,7 +8,6 @@ version = "0.1.0" [dependencies] gray_matter = "0.2" pulldown-cmark = "0.12" -walkdir = "2" # Syntax highlighting ropey = "1.6" diff --git a/src/main.rs b/src/main.rs index d049c97..302c3b7 100644 --- a/src/main.rs +++ b/src/main.rs @@ -350,12 +350,7 @@ fn copy_static_assets(static_dir: &Path, output_dir: &Path) -> Result<()> { source: e, })?; - for entry in walkdir::WalkDir::new(static_dir) - .into_iter() - .filter_map(|e| e.ok()) - .filter(|e| e.file_type().is_file()) - { - let src = entry.path(); + for src in walk_dir(static_dir)? { let relative = src.strip_prefix(static_dir).unwrap(); let dest = output_dir.join(relative); @@ -368,8 +363,8 @@ fn copy_static_assets(static_dir: &Path, output_dir: &Path) -> Result<()> { // Bundle CSS files (resolves @imports), copy others directly if src.extension().is_some_and(|ext| ext == "css") { - let original_size = fs::metadata(src).map(|m| m.len()).unwrap_or(0); - let bundled = bundle_css(src).map_err(Error::CssBundle)?; + let original_size = fs::metadata(&src).map(|m| m.len()).unwrap_or(0); + let bundled = bundle_css(&src).map_err(Error::CssBundle)?; fs::write(&dest, &bundled).map_err(|e| Error::WriteFile { path: dest.clone(), source: e, @@ -382,7 +377,7 @@ fn copy_static_assets(static_dir: &Path, output_dir: &Path) -> Result<()> { bundled.len() ); } else { - fs::copy(src, &dest).map_err(|e| Error::WriteFile { + fs::copy(&src, &dest).map_err(|e| Error::WriteFile { path: dest.clone(), source: e, })?; @@ -392,3 +387,28 @@ fn copy_static_assets(static_dir: &Path, output_dir: &Path) -> Result<()> { Ok(()) } + +/// Recursively walk a directory, returning all file paths. +fn walk_dir(dir: &Path) -> Result> { + let mut files = Vec::new(); + walk_dir_inner(dir, &mut files)?; + Ok(files) +} + +fn walk_dir_inner(dir: &Path, files: &mut Vec) -> Result<()> { + let entries = fs::read_dir(dir).map_err(|e| Error::ReadFile { + path: dir.to_path_buf(), + source: e, + })?; + + for entry in entries.filter_map(|e| e.ok()) { + let path = entry.path(); + if path.is_dir() { + walk_dir_inner(&path, files)?; + } else if path.is_file() { + files.push(path); + } + } + + Ok(()) +}