1use comfy_table::{presets, Attribute, Cell, ContentArrangement, Row, Table, TableComponent};
2use crossterm::style::{style, Color, Stylize};
3
4#[must_use]
5pub fn new_table() -> Table {
6 let mut table = Table::new();
7 table
8 .load_preset(presets::UTF8_FULL_CONDENSED)
9 .set_style(TableComponent::BottomBorder, ' ')
10 .set_style(TableComponent::BottomBorderIntersections, ' ')
11 .set_style(TableComponent::TopBorder, ' ')
12 .set_style(TableComponent::TopBorderIntersections, ' ')
13 .set_style(TableComponent::HeaderLines, '-')
14 .set_style(TableComponent::RightHeaderIntersection, ' ')
15 .set_style(TableComponent::LeftHeaderIntersection, ' ')
16 .set_style(TableComponent::MiddleHeaderIntersections, ' ')
17 .set_style(TableComponent::LeftBorder, ' ')
18 .set_style(TableComponent::RightBorder, ' ')
19 .set_style(TableComponent::TopRightCorner, ' ')
20 .set_style(TableComponent::TopLeftCorner, ' ')
21 .set_style(TableComponent::BottomLeftCorner, ' ')
22 .set_style(TableComponent::BottomRightCorner, ' ')
23 .set_style(TableComponent::VerticalLines, ' ')
24 .set_content_arrangement(ContentArrangement::Dynamic);
25 table
26}
27
28pub fn print_one_column_table<I: ExactSizeIterator<Item = S>, S: ToString>(
29 head: &str,
30 head_color: Option<comfy_table::Color>,
31 rows: I,
32) {
33 if let Some(t) = create_one_column_table(head, head_color, rows) {
34 println!("{t}");
35 }
36}
37
38pub fn create_one_column_table<I: ExactSizeIterator<Item = S>, S: ToString>(
39 head: &str,
40 head_color: Option<comfy_table::Color>,
41 rows: I,
42) -> Option<Table> {
43 if rows.len() == 0 {
44 None
45 } else {
46 let mut table = new_table();
47 let mut head = Cell::new(head).add_attribute(Attribute::Bold);
48 if let Some(fg) = head_color {
49 head = head.fg(fg);
50 }
51 table.set_header([head]);
52 table.add_rows(rows.into_iter().map(|s| Row::from([s])));
53
54 Some(table)
55 }
56}
57
58#[must_use]
59pub fn create_solution_table(path: &str) -> Table {
60 let mut table = new_table();
61 table.set_header([Cell::new(path).add_attribute(Attribute::Bold).fg(
62 comfy_table::Color::Rgb {
63 r: 0xAA,
64 g: 0xAA,
65 b: 0xAA,
66 },
67 )]);
68 table.set_style(TableComponent::HeaderLines, ' ');
69 table
70}
71
72pub fn print_solution_path(path: &str) {
73 let path = style(path)
74 .with(Color::Rgb {
75 r: 0xAA,
76 g: 0xAA,
77 b: 0xAA,
78 })
79 .bold();
80 println!(" {path}");
81}