diff options
author | Sebastian Thiel <sthiel@thoughtworks.com> | 2019-06-05 08:13:16 +0530 |
---|---|---|
committer | Sebastian Thiel <sthiel@thoughtworks.com> | 2019-06-05 08:13:16 +0530 |
commit | 50438ef584d5f2ade0a0501ebca151c99893580f (patch) | |
tree | 1f65c4058681a21f76298bfefc65cb5b86ea48cd /src/interactive/app/common.rs | |
parent | b0a02d30f97d15e0c6fc19e5f4f7b8c56500ff7a (diff) |
move sorted_entries closer to where it is used
Diffstat (limited to 'src/interactive/app/common.rs')
-rw-r--r-- | src/interactive/app/common.rs | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/src/interactive/app/common.rs b/src/interactive/app/common.rs new file mode 100644 index 0000000..10d9f11 --- /dev/null +++ b/src/interactive/app/common.rs @@ -0,0 +1,40 @@ +use dua::traverse::{EntryData, Tree, TreeIndex}; +use itertools::Itertools; +use petgraph::Direction; + +#[derive(Debug, Copy, Clone, PartialOrd, PartialEq, Eq)] +pub enum SortMode { + SizeDescending, + SizeAscending, +} + +impl SortMode { + pub fn toggle_size(&mut self) { + use SortMode::*; + *self = match self { + SizeAscending => SizeDescending, + SizeDescending => SizeAscending, + } + } +} + +impl Default for SortMode { + fn default() -> Self { + SortMode::SizeDescending + } +} + +pub fn sorted_entries( + tree: &Tree, + node_idx: TreeIndex, + sorting: SortMode, +) -> Vec<(TreeIndex, &EntryData)> { + use SortMode::*; + tree.neighbors_directed(node_idx, Direction::Outgoing) + .filter_map(|idx| tree.node_weight(idx).map(|w| (idx, w))) + .sorted_by(|(_, l), (_, r)| match sorting { + SizeDescending => r.size.cmp(&l.size), + SizeAscending => l.size.cmp(&r.size), + }) + .collect() +} |