parallel_disk_usage/data_tree/
constructors.rs

1use super::DataTree;
2use crate::size;
3
4impl<Name, Size: size::Size> DataTree<Name, Size> {
5    /// Create a tree representation of a directory.
6    pub fn dir(name: Name, inode_size: Size, children: Vec<Self>, depth: u64) -> Self {
7        let size = inode_size + children.iter().map(DataTree::size).sum();
8        let children = if depth > 0 { children } else { Vec::new() };
9        DataTree {
10            name,
11            size,
12            children,
13        }
14    }
15
16    /// Create a tree representation of a file.
17    pub fn file(name: Name, size: Size) -> Self {
18        DataTree {
19            name,
20            size,
21            children: Vec::new(),
22        }
23    }
24
25    /// Create a directory constructor of fixed inode size.
26    pub fn fixed_size_dir_constructor(inode_size: Size) -> impl Fn(Name, Vec<Self>) -> Self
27    where
28        Size: Copy,
29    {
30        move |name, children| DataTree::dir(name, inode_size, children, 1)
31    }
32}