dirwalk 1.1.1

Platform-optimized recursive directory walker with metadata
Documentation
//! Grouping utilities for walk results.
//!
//! Groups entries into `BTreeMap`s keyed by extension, parent directory, or
//! depth.

use crate::entry::Entry;
use crate::util::parent_dir;
use std::collections::BTreeMap;

pub fn group_by_extension(entries: &[Entry]) -> BTreeMap<Option<&str>, Vec<&Entry>> {
    let mut map: BTreeMap<Option<&str>, Vec<&Entry>> = BTreeMap::new();
    for entry in entries {
        map.entry(entry.extension()).or_default().push(entry);
    }
    map
}

pub fn group_by_directory(entries: &[Entry]) -> BTreeMap<&str, Vec<&Entry>> {
    let mut map: BTreeMap<&str, Vec<&Entry>> = BTreeMap::new();
    for entry in entries {
        let parent = parent_dir(&entry.relative_path);
        map.entry(parent).or_default().push(entry);
    }
    map
}

pub fn group_by_depth(entries: &[Entry]) -> BTreeMap<u32, Vec<&Entry>> {
    let mut map: BTreeMap<u32, Vec<&Entry>> = BTreeMap::new();
    for entry in entries {
        map.entry(entry.depth).or_default().push(entry);
    }
    map
}