summaryrefslogtreecommitdiffstats
path: root/src/interactive/app/common.rs
diff options
context:
space:
mode:
authorSebastian Thiel <sthiel@thoughtworks.com>2019-06-05 08:13:16 +0530
committerSebastian Thiel <sthiel@thoughtworks.com>2019-06-05 08:13:16 +0530
commit50438ef584d5f2ade0a0501ebca151c99893580f (patch)
tree1f65c4058681a21f76298bfefc65cb5b86ea48cd /src/interactive/app/common.rs
parentb0a02d30f97d15e0c6fc19e5f4f7b8c56500ff7a (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.rs40
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()
+}