phsym / prettytable-rs

A rust library to print aligned and formatted tables
https://crates.io/crates/prettytable-rs
BSD 3-Clause "New" or "Revised" License
932 stars 74 forks source link

Apply dynamic styles to nested table #154

Open samiraguiar opened 1 year ago

samiraguiar commented 1 year ago

Is it possible to have dynamic styles (e.g. different color based on the contents) for nested tables? I couldn't get it to work and it doesn't seem to be possible because the table is print to a string without styles when nested.

pinkforest commented 1 year ago

Could we sketch some examples of the desired minimal / ideal support(s) ?

samiraguiar commented 1 year ago

Ideally it would be something like this:

pub fn bool_icon(v: bool) -> Cell {
    if v {
        cell![Fgb -> "✔"]
    } else {
        cell![Frb -> "✘"]
    }
}

...
subtable.add_row(row![ "Enabled?", bool_icon(d.can_connect) ]);
table.add_row(row![ "Details", subtable ]);
...

Or without macros if not possible. When it's not inside a subtable I can workaround it by not using macros:

table.add_row(Row::new(vec![
    Cell::new("Enabled?"),
    bool_icon(d.can_connect),
]));

But with a subtable this doesn't work because it is converted to a string without styles first.

pinkforest commented 1 year ago

Would you like to try a PR ?

samiraguiar commented 1 year ago

Sure, I'd love to. I can't make promises on a time frame but I'll take a look when possible