ecb_rates/table/
table_display.rs

1use colored::Colorize;
2
3use super::TableGet;
4
5pub fn helper_table_print<T: TableGet>(
6    f: &mut std::fmt::Formatter<'_>,
7    table: &T,
8) -> std::fmt::Result {
9    let width = table.get_width();
10    let left_offset = " ".repeat(table.get_left_offset());
11
12    if let Some(header) = table.get_header() {
13        let middle_padding_amount = (width - header.len()) / 2;
14        assert!(middle_padding_amount > 0);
15        let middle_padding = " ".repeat(middle_padding_amount);
16        writeln!(
17            f,
18            "{}{}{}{}",
19            &left_offset,
20            middle_padding,
21            header.bold().cyan(),
22            middle_padding
23        )?;
24    }
25
26    let column_left = table.get_column_left();
27    let column_right = table.get_column_right();
28    let right_padding_amount = width - column_left.len() - column_right.len();
29    let right_padding = " ".repeat(right_padding_amount);
30    writeln!(
31        f,
32        "{}{}{}{}",
33        &left_offset,
34        column_left.bold().yellow(),
35        right_padding,
36        column_right.bold().yellow()
37    )?;
38    writeln!(f, "{}{}", &left_offset, "-".repeat(width))?;
39
40    for (left, right) in table.get_rows().iter() {
41        let left_str = left.as_ref();
42        let right_str = right.to_string();
43        let padding_amount = width.saturating_sub(left_str.len() + right_str.len());
44        let padding = " ".repeat(padding_amount);
45        writeln!(
46            f,
47            "{}{}{}{}",
48            &left_offset,
49            left_str.bold().green(),
50            padding,
51            right_str
52        )?;
53    }
54
55    Ok(())
56}