nuke_dir/
lib.rs

1use std::path::Path;
2
3/// Deletes a directory by removing all files and subdirectories first,
4/// then deleting the top-level directory
5pub fn nuke_dir<P: AsRef<Path>>(path: P) -> Result<(), String> {
6    use std::fs;
7    let path = path.as_ref();
8    for entry in
9        fs::read_dir(path).map_err(|e| format!("{}: {e}", path.display()))?
10    {
11        let entry = entry.map_err(|e| format!("{}: {}", path.display(), e))?;
12        let path = entry.path();
13
14        let file_type = entry
15            .file_type()
16            .map_err(|e| format!("{}: {}", path.display(), e))?;
17
18        if file_type.is_dir() {
19            nuke_dir(&path)?;
20            fs::remove_dir(&path)
21                .map_err(|e| format!("{}: {}", path.display(), e))?;
22        } else {
23            fs::remove_file(&path)
24                .map_err(|e| format!("{}: {}", path.display(), e))?;
25        }
26    }
27
28    Ok(())
29}