use std::cmp::Ordering; use std::path::PathBuf; #[derive(Debug, Eq, Clone)] pub struct DisplayNode { pub name: PathBuf, //todo: consider moving to a string? pub size: u64, pub children: Vec, } impl Ord for DisplayNode { fn cmp(&self, other: &Self) -> Ordering { if self.size == other.size { self.name.cmp(&other.name) } else { self.size.cmp(&other.size) } } } impl PartialOrd for DisplayNode { fn partial_cmp(&self, other: &Self) -> Option { Some(self.cmp(other)) } } impl PartialEq for DisplayNode { fn eq(&self, other: &Self) -> bool { self.name == other.name && self.size == other.size && self.children == other.children } } impl DisplayNode { pub fn num_siblings(&self) -> u64 { self.children.len() as u64 } pub fn get_children_from_node(&self, is_reversed: bool) -> impl Iterator { if is_reversed { let children: Vec = self.children.clone().into_iter().rev().collect(); children.into_iter() } else { self.children.clone().into_iter() } } }