//! This example demonstrates using the [`col!`] and [`row!`] macros to easily //! organize multiple tables together into a single, new [`Table`] display. //! //! * 🚩 This example requires the `macros` feature. //! //! * Note how both macros can be used in combination to layer //! several table arrangements together. //! //! * Note how [`col!`] and [`row!`] support idiomatic argument duplication //! with the familiar `[T; N]` syntax. use tabled::{ col, row, settings::{Alignment, Style}, Table, Tabled, }; #[derive(Tabled)] struct Person { name: String, age: u8, is_validated: bool, } impl Person { fn new(name: &str, age: u8, is_validated: bool) -> Self { Self { name: name.into(), age, is_validated, } } } fn main() { let validated = [Person::new("Sam", 31, true), Person::new("Sarah", 26, true)]; let not_validated = [ Person::new("Jack Black", 51, false), Person::new("Michelle Goldstein", 44, true), ]; let unsure = [ Person::new("Jon Doe", 255, false), Person::new("Mark Nelson", 13, true), Person::new("Terminal Monitor", 0, false), Person::new("Adam Blend", 17, true), ]; let table_a = Table::new(&validated).with(Style::ascii()).to_string(); let table_b = Table::new(¬_validated).with(Style::modern()).to_string(); let table_c = Table::new(&unsure).with(Style::ascii_rounded()).to_string(); let row_table = row![table_c, table_b]; let col_table = col![table_c; 3]; let mut row_col_table = col![row![table_a, table_b].with(Style::empty()), table_c]; row_col_table.with(Alignment::center()); println!("{row_table}\n{col_table}\n{row_col_table}",); }