use std::path::PathBuf;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum DirectoryFilter {
FoldersOnly,
#[default]
FilesAndFolders,
AllIncludingHidden,
}
impl DirectoryFilter {
pub fn skips_hidden(self) -> bool {
!matches!(self, Self::AllIncludingHidden)
}
pub fn skips_files(self) -> bool {
matches!(self, Self::FoldersOnly)
}
}
#[derive(Debug, Clone)]
pub struct TreeConfig {
pub root_path: PathBuf,
pub filter: DirectoryFilter,
pub max_depth: Option<u32>,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn default_is_files_and_folders() {
assert_eq!(DirectoryFilter::default(), DirectoryFilter::FilesAndFolders);
}
#[test]
fn filter_predicates() {
assert!(DirectoryFilter::FoldersOnly.skips_hidden());
assert!(DirectoryFilter::FoldersOnly.skips_files());
assert!(DirectoryFilter::FilesAndFolders.skips_hidden());
assert!(!DirectoryFilter::FilesAndFolders.skips_files());
assert!(!DirectoryFilter::AllIncludingHidden.skips_hidden());
assert!(!DirectoryFilter::AllIncludingHidden.skips_files());
}
}