comfy_table/style/
table.rs

1/// Specify how comfy_table should arrange the content in your table.
2///
3/// ```
4/// use comfy_table::{ContentArrangement, Table};
5///
6/// let mut table = Table::new();
7/// table.set_content_arrangement(ContentArrangement::Dynamic);
8/// ```
9#[derive(Clone, Debug)]
10pub enum ContentArrangement {
11    /// Don't do any content arrangement.\
12    /// Tables with this mode might become wider than your output and look ugly.\
13    /// Constraints on columns are still respected.
14    Disabled,
15    /// Dynamically determine the width of columns in regard to terminal width and content length.\
16    /// With this mode, the content in cells will wrap dynamically to get the best column layout
17    /// for the given content.\
18    /// Constraints on columns are still respected.
19    ///
20    /// **Warning:** If terminal width cannot be determined and no table_width is set via
21    /// [Table::set_width](crate::table::Table::set_width),
22    /// this option won't work and [Disabled](ContentArrangement::Disabled) will be used as a
23    /// fallback.
24    Dynamic,
25    /// This is mode is the same as the [ContentArrangement::Dynamic] arrangement, but it will
26    /// always use as much space as it's given. Any surplus space will be distributed between
27    /// all columns.
28    DynamicFullWidth,
29}
30
31/// All configurable table components.
32/// A character can be assigned to each component via
33/// [Table::set_style](crate::table::Table::set_style). This is then used to draw character of the
34/// respective component to the commandline.
35///
36/// I hope that most component names are self-explanatory. Just in case:
37/// BorderIntersections are Intersections, where rows/columns lines meet outer borders.
38/// E.g.:
39/// ```text
40///        ---------
41///        v       |
42/// +---+---+---+  |
43/// | a | b | c |  |
44/// +===+===+===+<-|
45/// |   |   |   |  |
46/// +---+---+---+<-- These "+" chars are Borderintersections.
47/// |   |   |   |    The inner "+" chars are MiddleIntersections
48/// +---+---+---+
49/// ```
50#[derive(Debug, PartialEq, Eq, Hash, Clone, Copy)]
51pub enum TableComponent {
52    LeftBorder,
53    RightBorder,
54    TopBorder,
55    BottomBorder,
56    LeftHeaderIntersection,
57    HeaderLines,
58    MiddleHeaderIntersections,
59    RightHeaderIntersection,
60    VerticalLines,
61    HorizontalLines,
62    MiddleIntersections,
63    LeftBorderIntersections,
64    RightBorderIntersections,
65    TopBorderIntersections,
66    BottomBorderIntersections,
67    TopLeftCorner,
68    TopRightCorner,
69    BottomLeftCorner,
70    BottomRightCorner,
71}
72
73impl TableComponent {
74    const fn components() -> [TableComponent; 19] {
75        [
76            TableComponent::LeftBorder,
77            TableComponent::RightBorder,
78            TableComponent::TopBorder,
79            TableComponent::BottomBorder,
80            TableComponent::LeftHeaderIntersection,
81            TableComponent::HeaderLines,
82            TableComponent::MiddleHeaderIntersections,
83            TableComponent::RightHeaderIntersection,
84            TableComponent::VerticalLines,
85            TableComponent::HorizontalLines,
86            TableComponent::MiddleIntersections,
87            TableComponent::LeftBorderIntersections,
88            TableComponent::RightBorderIntersections,
89            TableComponent::TopBorderIntersections,
90            TableComponent::BottomBorderIntersections,
91            TableComponent::TopLeftCorner,
92            TableComponent::TopRightCorner,
93            TableComponent::BottomLeftCorner,
94            TableComponent::BottomRightCorner,
95        ]
96    }
97
98    pub fn iter() -> impl Iterator<Item = TableComponent> {
99        TableComponent::components().into_iter()
100    }
101}