remove_dir_all 0.7.0

A safe, reliable implementation of remove_dir_all for Windows
Documentation
use std::fs;
use std::io;
use std::path::Path;

fn remove_file_or_dir_all<P: AsRef<Path>>(path: P) -> io::Result<()> {
    match fs::remove_file(&path) {
        // Unfortunately, there is no ErrorKind for EISDIR
        Err(e) if e.raw_os_error() == Some(libc::EISDIR) =>
            fs::remove_dir_all(&path),
        r => r,
    }
}

pub fn _remove_dir_contents<P: AsRef<Path>>(path: P) -> Result<(), io::Error> {
    for entry in fs::read_dir(path)? {
        let entry_path = entry?.path();
        remove_file_or_dir_all(&entry_path)?;
    }

    Ok(())
}