parallel_disk_usage/visualizer.rs
1pub mod bar_alignment;
2pub mod child_position;
3pub mod column_width_distribution;
4pub mod direction;
5pub mod parenthood;
6pub mod proportion_bar;
7pub mod tree;
8
9pub use bar_alignment::BarAlignment;
10pub use child_position::ChildPosition;
11pub use column_width_distribution::ColumnWidthDistribution;
12pub use direction::Direction;
13pub use parenthood::Parenthood;
14pub use proportion_bar::{ProportionBar, ProportionBarBlock};
15pub use tree::{TreeHorizontalSlice, TreeSkeletalComponent};
16
17use super::{data_tree::DataTree, size};
18use std::{fmt::Display, num::NonZeroUsize};
19
20/// Visualize a [`DataTree`].
21///
22/// The fields of the struct are the construction parameters of the ASCII chart.
23/// The [`Display`] trait can be used to create the ASCII chart.
24///
25/// **Example:**
26///
27/// ```no_run
28/// # use parallel_disk_usage::data_tree::DataTree;
29/// # use parallel_disk_usage::os_string_display::OsStringDisplay;
30/// # use parallel_disk_usage::size::Bytes;
31/// # use parallel_disk_usage::bytes_format::BytesFormat;
32/// # use parallel_disk_usage::visualizer::{Visualizer, Direction, BarAlignment, ColumnWidthDistribution};
33/// # fn _wrapper(create_data_tree: fn() -> DataTree<OsStringDisplay, Bytes>) {
34/// let data_tree: DataTree<OsStringDisplay, Bytes> = create_data_tree();
35/// let visualizer = Visualizer {
36/// data_tree: &data_tree,
37/// bytes_format: BytesFormat::MetricUnits,
38/// direction: Direction::BottomUp,
39/// bar_alignment: BarAlignment::Right,
40/// column_width_distribution: ColumnWidthDistribution::total(100),
41/// max_depth: std::num::NonZeroUsize::new(10).unwrap(),
42/// };
43/// println!("{visualizer}");
44/// # }
45/// ```
46#[derive(Debug)]
47pub struct Visualizer<'a, Name, Size>
48where
49 Name: Display,
50 Size: size::Size,
51{
52 /// The tree to visualize.
53 pub data_tree: &'a DataTree<Name, Size>,
54 /// Format to be used to [`display`](size::Size::display) the sizes.
55 pub bytes_format: Size::DisplayFormat,
56 /// The direction of the visualization of the tree.
57 pub direction: Direction,
58 /// The alignment of the bars.
59 pub bar_alignment: BarAlignment,
60 /// Distribution and total number of characters/blocks can be placed in a line.
61 pub column_width_distribution: ColumnWidthDistribution,
62 /// Maximum number of levels that should be visualized.
63 pub max_depth: NonZeroUsize,
64}
65
66mod copy;
67mod display;
68mod methods;