use walkdir::DirEntry;
pub fn is_hidden(entry: &DirEntry) -> bool {
entry.file_name()
.to_str()
.map(|s| s.starts_with('.'))
.unwrap_or(false)
}
pub fn is_target_dir(entry: &DirEntry) -> bool {
entry.file_name() == "target" && entry.file_type().is_dir()
}
#[cfg(test)]
mod tests {
use super::*;
use std::path::PathBuf;
use walkdir::DirEntry;
use std::fs::{self, File};
use tempfile::tempdir;
fn create_dir_entry(path: &PathBuf, is_dir: bool) -> DirEntry {
walkdir::WalkDir::new(path)
.into_iter()
.filter_map(Result::ok)
.find(|e| e.path() == path && e.file_type().is_dir() == is_dir)
.expect("Failed to create DirEntry")
}
#[test]
fn test_is_hidden() {
let temp_dir = tempdir().unwrap();
let hidden_dir_path = temp_dir.path().join(".hidden_dir");
fs::create_dir(&hidden_dir_path).unwrap();
let regular_dir_path = temp_dir.path().join("regular_dir");
fs::create_dir(®ular_dir_path).unwrap();
let hidden_file_path = temp_dir.path().join(".hidden_file");
File::create(&hidden_file_path).unwrap();
let regular_file_path = temp_dir.path().join("regular_file");
File::create(®ular_file_path).unwrap();
let hidden_dir_entry = create_dir_entry(&hidden_dir_path, true);
assert!(is_hidden(&hidden_dir_entry));
let regular_dir_entry = create_dir_entry(®ular_dir_path, true);
assert!(!is_hidden(®ular_dir_entry));
let hidden_file_entry = create_dir_entry(&hidden_file_path, false);
assert!(is_hidden(&hidden_file_entry));
let regular_file_entry = create_dir_entry(®ular_file_path, false);
assert!(!is_hidden(®ular_file_entry));
}
#[test]
fn test_is_target_dir() {
let temp_dir = tempdir().unwrap();
let target_dir_path = temp_dir.path().join("target");
fs::create_dir(&target_dir_path).unwrap();
let regular_dir_path = temp_dir.path().join("regular_dir");
fs::create_dir(®ular_dir_path).unwrap();
let target_file_path = temp_dir.path().join("target_file");
File::create(&target_file_path).unwrap();
let target_dir_entry = create_dir_entry(&target_dir_path, true);
assert!(is_target_dir(&target_dir_entry));
let regular_dir_entry = create_dir_entry(®ular_dir_path, true);
assert!(!is_target_dir(®ular_dir_entry));
let target_file_entry = create_dir_entry(&target_file_path, false);
assert!(!is_target_dir(&target_file_entry));
}
}