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;