use nu_color_config::TextStyle; use nu_table::{Table, TableConfig, TableTheme}; use tabled::papergrid::records::{cell_info::CellInfo, tcell::TCell}; fn main() { let args: Vec<_> = std::env::args().collect(); let mut width = 0; if args.len() > 1 { // Width in terminal characters width = args[1].parse::().expect("Need a width in columns"); } if width < 4 { println!("Width must be greater than or equal to 4, setting width to 80"); width = 80; } // The mocked up table data let (table_headers, row_data) = make_table_data(); // The table headers let headers = vec_of_str_to_vec_of_styledstr(&table_headers, true); // The table rows let rows = vec_of_str_to_vec_of_styledstr(&row_data, false); // The table itself let count_cols = std::cmp::max(rows.len(), headers.len()); let mut rows = vec![rows; 3]; rows.insert(0, headers); let theme = TableTheme::rounded(); let table_cfg = TableConfig::new(theme, true, false, false); let table = Table::new(rows, (3, count_cols)); // Capture the table as a string let output_table = table .draw(table_cfg, width) .unwrap_or_else(|| format!("Couldn't fit table into {width} columns!")); // Draw the table println!("{output_table}") } fn make_table_data() -> (Vec<&'static str>, Vec<&'static str>) { let table_headers = vec![ "category", "description", "emoji", "ios_version", "unicode_version", "aliases", "tags", "category2", "description2", "emoji2", "ios_version2", "unicode_version2", "aliases2", "tags2", ]; let row_data = vec![ "Smileys & Emotion", "grinning face", "😀", "6", "6.1", "grinning", "smile", "Smileys & Emotion", "grinning face", "😀", "6", "6.1", "grinning", "smile", ]; (table_headers, row_data) } fn vec_of_str_to_vec_of_styledstr( data: &[&str], is_header: bool, ) -> Vec, TextStyle>> { let mut v = vec![]; for x in data { if is_header { v.push(Table::create_cell( String::from(*x), TextStyle::default_header(), )) } else { v.push(Table::create_cell( String::from(*x), TextStyle::basic_left(), )) } } v }